常见问题
问题 1:在安装/卸载 SOLA-toolkit 时,提示 moffett 模块被占用 报错信息如下:
rmmod: ERROR: Module moffett is in use
Error, uninstall moffett driver fail
解决方法:
1、查看是否有进程占用 moffett 设备。
$ mx-smi list
2、查看打开的文件及进程。
$ sudo lsof | grep mf-
3、结束正在运行的用卡任务/进程。
```bash
$ kill -9 ${PID}
```
4、检查 moffett 的系统 module 的个数是否为 0。
$ lsmod | grep moffett
moffett 278528 1
5、移除已加载的 moffett 系统 module。
```Bash
$ sudo rmmod moffett
```
6、重试尝试卸载 SOLA toolkit 操作,若仍未正常安装/卸载 SOLA,请重启服务器后再次卸载。
问题 2:卸载 SOLA 时,提示程序在使用,不能卸载。报错信息如下:
There is a program in use and can not be uninstalled、Please try again later.
解决方法:
1、 查看是否有进程占用 moffett 设备。
```Bash
$ mx-smi list
```
2、请确认结束任何占用 moffett 设备的任务或进程。
3、分别排查是否有 dcsm、k8s plugin、dcsm exporter 服务在运行,如果服务在运行,请停止相应服务。
moffett device plugin 使用设备场景
# 查询集群中是否部署 moffett device plugin
$ kubectl get pods -l name=moffett-device-plugin-ds -n kube-system -o wide
# 集群中卸载 moffett device plugin,后续可参考 墨芯 Kubernetes 设备插件使用说明 重新部署
$ kubectl delete daemonset moffett-device-plugin-daemonset -n kube-system
# 只驱逐特定节点 ${node-name} 上的 moffett device plugin,为该节点添加污点,避免调度器启动新的 daemonset
$ kubectl taint nodes ${node-name} NeedFix=true:NoSchedule
$ kubectl describe node ${node-name} |grep Taints
$ kubectl delete pod -l name=moffett-device-plugin-ds -n kube-system --field-selector spec.nodeName= ${node-name}
$ kubectl get pod -n kube-system -o wide
# 移除污点,让 kubernetes 重新调度
$ kubectl taint nodes ${node-name} NeedFix=true:NoSchedule-
dcsm 使用设备场景
# 查询 mx-hostengine 是否正在运行
$ ps -ef | grep mx-hostengine
# 查询是否以 systemd service 的方式启动
$ systemctl status dcsm
# 暂停 dcsm 服务
$ sudo systemctl stop dcsm
# 若涉及系统重启的操作,避免 dcsm 开机自启,停止并禁止 dcsm 开机自启。
# 非 systemd service 启动的 mx-hostengine,可以通过 kill 命令终止进程
$ sudo systemctl --now disable dcsm
dcsm exporter 使用设备场景
解决方案一:通过标记节点为 Taints
```Bash
# 检查是否单机容器化启动,以docker为例
$ docker ps | grep dcsm-exporter
# 使用 docker stop 命令停掉 dcsm exporter容器
# 查询集群中是否部署 dcsm exporter
$ kubectl get pods -l app.kubernetes.io/name=dcsm-exporter -n moffett-monitoring -o wide
# 集群中卸载 dcsm exporter
$ kubectl delete daemonset dcsm-exporter -n moffett-monitoring
# 只驱逐特定节点 ${node-name} 上的 dcsm exporter,为该节点添加污点,避免调度器启动新的 daemonset
$ kubectl taint nodes ${node-name} NeedFix=true:NoSchedule
$ kubectl describe node ${node-name} |grep Taints
$ kubectl delete pod -l app.kubernetes.io/name=dcsm-exporter -n moffett-monitoring --field-selector spec.nodeName= ${node-name}
$ kubectl get pod -n moffett-monitoring -o wide
# 移除污点,让 kubernetes 重新调度
$ kubectl taint nodes ${node-name} NeedFix=true:NoSchedule-
```
解决方案二:通过节点亲和性
如果需要仅删除某个节点上的 `dcsm-exporter` 而不影响集群中其他服务,可通过给节点添加 Taint 的方式。我们也推荐使用通过添加给节点打特殊标签并使用 `nodeSelector` 方式。
1、为节点加标签:给需要移除 dcsm-exporter
的节点打上一个独特的标签。
```Bash
# ${node-name} 替换为实际节点名称
$ kubectl label node ${node-name} dcsm-exporter-disabled=true
```
2、查看标签。
# ${node-name} 替换为实际节点名称
$ kubectl get nodes --show-labels |grep ${node-name}
3、添加配置:在 dcsm-exporter.yaml 文件 spec 中添加如下配置:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: dcsm-exporter-disabled
operator: NotIn
values:
- "true"
4、应用配置:更新 DCSM Exporter 的 DaemonSet 配置。
$ kubectl apply -f dcsm-exporter.yaml
5、验证效果:检查目标节点上的 dcsm-exporter
Pod 是否被删除。
$ kubectl get pods -o wide -n moffett-monitoring
6、恢复节点:恢复该节点运行 dcsm-exporter
,删除标签即可。
$ kubectl label node ${node-name} dcsm-exporter-disabled-
问题 3:当用户操作变更墨芯设备或更新 SOLA 软件版本时,使用 MOFFETT Container Toolkit 时可能会提示如下报错信息:
$ docker run --rm -ti --device moffett.ai/spu=all ubuntu:22.04 mx-smi
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: failed to fulfil mount request: open /usr/local/sola-3.8.1.2/lib/libsola.so: no such file or directory: unknown.
解决方法:
问题在于,MOFFETT Container Toolkit 的安装配置时间早于设备或驱动库软件的版本变更时间,因此它仍沿用了旧的静态配置。当容器中的设备节点或 SOLA 版本发生变更时,只需执行以下命令重新生成 CDI 配置文件,即可解决问题。
$ sudo moffett-ctk cdi generate --output=/etc/cdi/moffett.yaml