Kubernetes中的GPU共享

  1. 添加策略配置文件
- --policy-config-file=/etc/kubernetes/scheduler-policy-config.json
  1. 将卷挂载添加到Pod
- mountPath: /etc/kubernetes/scheduler-policy-config.json
  name: scheduler-policy-config
  readOnly: true
- hostPath:
      path: /etc/kubernetes/scheduler-policy-config.json
      type: FileOrCreate
  name: scheduler-policy-config

最终修改为 apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: component: kube-scheduler tier: control-plane name: kube-scheduler namespace: kube-system spec: containers: - command: - kube-scheduler - --authentication-kubeconfig=/etc/kubernetes/scheduler.

AI 模型打包发布

运行

  • 默认从 .env 中读取环境变量
docker-compose run --rm model_package_release
  • 指定环境变量文件
docker-compose --env-file .env-test run --rm model_package_release

通过导出 Shell 环境变量可以替代 .env 文件中定义的环境变量

export MODEL_NAME=TEST
docker-compose run --rm model_package_release

命令base64

  • 解码(正确,这里之所以正确是因为base64过滤了。)
$ echo 'YWRtaW4=' | base64 -d
admin[username@hostname ~]$
  • 编码(错误,这是因为 echo 输出字符后会在后面再输出换行符。)
$ echo 'admin' | base64
YWRtaW4K
  • 方法一:使用 printf 命令。
$ printf 'admin' | base64
YWRtaW4=
  • 方法二:可以通过参数 -n 告诉 echo 不输出换行符。
$ echo -n 'admin' | base64
YWRtaW4=
  • 方法三:可以通过参数 -e 告诉 echo 启用反斜杠转义的解释。
$ echo -e 'admin\c' | base64
YWRtaW4=

可用的转义符(来自 man echo): - \ backslash - \a alert (BEL) - \b backspace - \c produce no further output - \e escape - \f form feed - \n new line - \r carriage return - \t horizontal tab - \v vertical tab - \0NNN byte with octal value NNN (1 to 3 digits) - \xHH byte with hexadecimal value HH (1 to 2 digits)

SSH X11 Forwarding

  • 验证
xclock
xeyes

  • 配置XAuth
$ vim ~/.ssh/config
Host *
    XAuthLocation /opt/X11/bin/xauth
  • SSH登录,可以尝试使用 ssh -X -vv 查看更多的失败信息。
$ ssh -X username@hostname
(base) username@hostname:~$ gedit

SSH 登录欢迎信息

终端登录时显示给用户的欢迎消息,无论是通过远程 SSH 登录还是直接通过 TTY 或终端,是 motd 的一部分,即 Message Of The Day 守护程序。 通过修改 /etc/update-motd.d 目录中的 /etc/motd 文件或脚本,可以自定义 motd 消息以适合每个用户或管理员的个性化需求。

命令helm

Helm 帮助您管理 Kubernetes 应用程序 —— Helm Charts 帮助您定义、安装和升级即使是最复杂的 Kubernetes 应用程序。

IoT 硬件:Raspberry Pi Camera

  • 3 Interface Options Configure connections to peripherals
  • P1 Camera Enable/disable connection to the Raspberry Pi Camera
  • Yes
reboot
  • 查看
$ cat /boot/config.txt | grep gpu_mem
gpu_mem=128
  • 修改
$ vim /boot/config.txt
$ vcgencmd get_camera
supported=1 detected=1
  • 打开摄像头,5秒后拍照(默认),保存为 image.jpg。
raspistill -o image.jpg
  • 打开摄像头,3秒后拍照,保存为 image.png,宽640:高480。
raspistill -t 3000 -o image.png -e png -w 640 -h 480
  • 打开摄像头,30秒内每2秒保存一张照片。
raspistill -t 30000 -tl 2000 -o image%04d.jpg
  • 录5秒1080p30视频,宽640:高480。
raspivid -t 5000 -o video.h264 -w 640 -h 480

Camera 没有安装好或者有质量问题。

IoT 硬件:Raspberry Pi ReSpeaker 智能语音识别双麦克风阵列

ReSpeaker 2-Mics Pi HAT是专为AI和语音应用设计的Raspberry Pi双麦克风扩展板。 这意味着您可以构建一个集成Amazona语音服务等的功能更强大,更灵活的语音产品。

该板是基于WM8960开发的低功耗立体声编解码器。 电路板两侧有两个麦克风采集声音,还提供3个APA102 RGB LED,1个用户按钮和2个板载Grove接口,用于扩展应用程序。 此外,3.5mm音频插孔或JST 2.0扬声器输出均可用于音频输出。

  • aplay
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: b1 [bcm2835 HDMI 1], device 0: bcm2835 HDMI 1 [bcm2835 HDMI 1]
  Subdevices: 4/4
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
card 1: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
  Subdevices: 4/4
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
card 2: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 [bcm2835-i2s-wm8960-hifi wm8960-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

IoT 硬件:NeoPixel

WS2812B 灯带 一个集控制电路与发光电路于一体的智能外控LED光源。可单独寻址数字 LED 灯。 每个像素都有自己的颜色和亮度。 您可以单独控制它们,并将其设置成任何颜色。 256 灰色级别可调节和 16777216 彩色 24 位全彩显示。

命令brew

  • 方法2:替换brew源
cd "$(brew --repo)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew-core.git
brew update

VS Code远程开发 - SSH

  1. VS Code将连接到SSH服务器并进行设置。 VS Code将使用进度通知使您保持最新状态。

  1. 连接后,您将进入一个空窗口。 您始终可以参考状态栏来查看连接到的主机。

  1. 选择菜单:File > Open...

Python实践

  • 不可变参数
>>> def func(x):
...     x=2
... 
>>> n=1
>>> func(n)
>>> n
1
  • 可变参数
>>> def func(x):
...     x.append(2)
... 
>>> l=[1]
>>> func(l)
>>> l
[1, 2]
  • 最佳实践(不管参数是可变还是不可变,明确地返回值。)
>>> def func(x):
...     pass
...     return x
... 
>>> n=1
>>> n = func(n)
>>> n
1

出于对性能优化的考虑,Python 内部会对 -5 到 256 的整型维持一个数组,起到一个缓存的作用。这样,每次试图创建一个 -5 到 256 范围内的整型数字时,Python 都会从这个数组中返回相对应的引用,而不是重新开辟一块新的内存空间。如果整型数字超出了这个范围,Python 则会每次使用都使用新的内存区域。