华为服务器中Mindie镜像的部署及启动方法
一、部署方法
首先要安装好Docker,然后点开网址https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f
拉取镜像需要申请权限:
注册登录后,即可提交申请,一般需要一个工作日,等审核通过后,点击下载即可弹出如下提示框:
按照上述方法步骤进行操作即可。在有root权限的终端执行,其中鲲鹏服务器为下载arm架构的镜像。
验证镜像是否拉取成功
拉取完成后,可通过以下命令查看本地镜像列表,确认是否存在目标镜像:
docker images | grep 1.0.0-300I-Duo-py311-openeuler24.03-lts
若输出结果包含该镜像信息,则表示拉取成功。
执行docker images
命令输出结果如下:
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie 1.0.0-300I-Duo-py311-openeuler24.03-lts 3a7f38bed48b 6 months ago 13.8GB
上述结果明确显示了镜像的完整名称、标签、ID、创建时间和大小,说明拉取成功。
关于镜像的存储位置
在 Docker 中,镜像默认存储在/var/lib/docker/
目录下,具体到您的环境中(从命令行路径[root@localhost overlay2]#
来看),使用的是overlay2
存储驱动,因此镜像文件实际存储在:
/var/lib/docker/overlay2/
overlay2
是 Docker 推荐的存储驱动,镜像文件会以分层(layer)的形式存储在该目录下的子文件夹中,每个文件夹对应镜像的一个分层,通过联合文件系统(UnionFS)技术组合成完整的镜像。
查看 Docker 存储配置的方法
如果想确认具体的存储路径,可以通过以下命令查看 Docker 的详细配置:
docker info | grep "Docker Root Dir"
输出结果通常为:
Docker Root Dir: /var/lib/docker
这就是 Docker 所有数据(包括镜像、容器、卷等)的根目录,镜像的实际分层数据就在其下的overlay2
子目录中。
二、启动方法
Docker 的分层存储是底层实现细节,用户无需直接操作这些分层文件,而是通过 Docker 命令来管理和使用镜像。对于你提到的mindie 1.0.0-300I-Duo-py311-openeuler24.03-lts
镜像,启动方法如下:
步骤 1:确认镜像的完整名称和标签
从你的docker images
输出中,镜像的完整标识为:
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts
(格式:仓库地址/镜像名:标签
)
步骤 2:启动镜像为容器
使用docker run
命令启动镜像,基本格式:
docker run [选项] 镜像完整标识 [容器内执行的命令]
针对mindie
镜像(通常是深度学习相关环境),常用启动命令示例:
docker run -it --name my_mindie_container \--privileged=true \swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts \/bin/bash
选项说明:
-it
:以交互模式启动,并分配伪终端(方便进入容器内操作)。--name my_mindie_container
:给容器起一个自定义名称(方便后续管理)。--privileged=true
:赋予容器特权模式(部分场景需要,如访问硬件设备)。- 最后的
/bin/bash
:指定容器启动后执行的命令(进入 bash 终端)。
步骤 3:使用容器内的功能
启动后会自动进入容器内的 bash 终端,此时可以:
- 运行镜像中预装的程序(如 MindSpore 相关命令)。
- 查看环境配置:
python --version
、pip list
等。 - 若需要退出容器但不停止,按
Ctrl+P+Q
组合键。
后续管理命令
- 查看正在运行的容器:
docker ps
- 重新进入已启动的容器:
docker exec -it my_mindie_container /bin/bash
- 停止容器:
docker stop my_mindie_container
- 重启容器:
docker restart my_mindie_container
- 删除容器(需先停止):
docker rm my_mindie_container
注意事项
- 若镜像需要访问宿主机的 GPU/AI 芯片(如昇腾芯片),可能需要额外添加设备映射参数(如
--device=/dev/davinci0
),具体需参考该镜像的官方文档。 - 若需要持久化数据,可通过
-v 宿主机路径:容器内路径
挂载目录(如-v /data:/workspace/data
)。
通过以上步骤,即可正常使用该镜像的功能,无需关心底层分层文件的具体结构。
启动示例代码:
docker run -it -d --net=host --shm-size=32g \--name Qwen3-32B \--device=/dev/davinci_manager \--device=/dev/hisi_hdc \--device=/dev/devmm_svm \--device=/dev/davinci0 \--device=/dev/davinci1 \--device=/dev/davinci2 \--device=/dev/davinci3 \--device=/dev/davinci4 \--device=/dev/davinci5 \--device=/dev/davinci6 \--device=/dev/davinci7 \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \-v /usr/local/sbin:/usr/local/sbin:ro \-v /root/:/root/ \swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts bash
三、常见问题
(一)从错误信息来看,问题出在docker run
命令的最后缺少了要执行的命令,或者命令格式有误(可能是由于换行符导致的空格被识别为命令)。
错误原因分析
命令末尾的反斜杠\
后面可能存在多余的空格或特殊字符,导致 Docker 将一个空字符串识别为要执行的命令,而空命令在$PATH
中找不到,因此报错:exec: " ": executable file not found in $PATH
。
解决方法
在命令末尾明确指定要执行的命令(通常是/bin/bash
或bash
),确保没有多余的空格或特殊字符。修正后的命令如下:
docker run -it -d --net=host --shm-size=32g \--name Qwen3-32B \--device=/dev/davinci_manager \--device=/dev/hisi_hdc \--device=/dev/devmm_svm \--device=/dev/davinci0 \--device=/dev/davinci1 \--device=/dev/davinci2 \--device=/dev/davinci3 \--device=/dev/davinci4 \--device=/dev/davinci5 \--device=/dev/davinci6 \--device=/dev/davinci7 \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \-v /usr/local/sbin:/usr/local/sbin:ro \-v /root/:/root/ \swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts \/bin/bash
关键修正点
- 确保最后一行的镜像名称后面,明确加上要执行的命令(如
/bin/bash
)。 - 检查每个换行符
\
后面是否有多余的空格(建议删除\
后的所有字符,只保留换行)。
验证容器是否启动
执行上述命令后,通过以下命令查看容器状态:
docker ps | grep Qwen3-32B
若输出容器信息,则表示启动成功。之后可通过以下命令进入容器:
docker exec -it Qwen3-32B bash
如果需要运行镜像中特定的程序(如模型推理脚本),可将最后面的bash
替换为具体的命令(例如python /path/to/script.py
)。
(二)错误提示表明名为Qwen3-32B
的容器已经存在,因此无法创建同名容器。解决方法有两种:
方法 1:删除已存在的同名容器(推荐,若旧容器无用)
-
先停止该容器(如果正在运行):
docker stop Qwen3-32B
-
然后删除该容器:
docker rm Qwen3-32B
-
重新执行原启动命令:
docker run -it -d --net=host --shm-size=32g \--name Qwen3-32B \--device=/dev/davinci_manager \--device=/dev/hisi_hdc \--device=/dev/devmm_svm \--device=/dev/davinci0 \--device=/dev/davinci1 \--device=/dev/davinci2 \--device=/dev/davinci3 \--device=/dev/davinci4 \--device=/dev/davinci5 \--device=/dev/davinci6 \--device=/dev/davinci7 \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \-v /usr/local/sbin:/usr/local/sbin:ro \-v /root/:/root/ \swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts bash
方法 2:给新容器起一个不同的名称(若需要保留旧容器)
只需修改--name
参数的值,例如改为Qwen3-32B-new
:
docker run -it -d --net=host --shm-size=32g \--name Qwen3-32B-new \ # 这里修改了容器名称--device=/dev/davinci_manager \--device=/dev/hisi_hdc \--device=/dev/devmm_svm \--device=/dev/davinci0 \--device=/dev/davinci1 \--device=/dev/davinci2 \--device=/dev/davinci3 \--device=/dev/davinci4 \--device=/dev/davinci5 \--device=/dev/davinci6 \--device=/dev/davinci7 \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \-v /usr/local/sbin:/usr/local/sbin:ro \-v /root/:/root/ \swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts bash
验证结果
执行成功后,通过以下命令查看容器是否正常运行:
docker ps | grep Qwen3-32B # 或对应新名称
若输出容器信息,则表示启动成功,之后可通过docker exec -it 容器名称 /bin/bash
进入容器操作。