We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在团队公用的昇腾裸机上清晰、高效地创建和管理昇腾 NPU 环境的 docker 容器,方便大家在隔离环境中开发。
dockerfile、docker-compose.yaml 等文件来自 @hipudding 感谢!
前置条件:昇腾裸机已安装 docker 及 npu 驱动
FROM ubuntu:20.04 # define your var ARG YOUR_USER_NAME="your_user_name" ARG YOUR_GROUP_ID="XXXX" ARG YOUR_USER_ID="XXXX" ARG DEBIAN_FRONTEND=noninteractive ENV TZ="Asia/shanghai" RUN sed -i 's/ports.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \ apt-get update && \ yes | unminimize && \ apt-get install -y adduser sudo vim gcc g++ cmake make gdb git tmux openssh-server \ net-tools iputils-ping python3-distutils python3-setuptools \ python3-wheel python3-yaml python3-dbg python3-pip libmpich-dev # Config user. User must join group HwHiAiUser(1000) to use npu. # Identify user id and group id to match user out of docker. (optional) RUN groupadd -g $YOUR_GROUP_ID $YOUR_USER_NAME && \ useradd -u $YOUR_USER_ID -g $YOUR_USER_NAME -ms /bin/bash $YOUR_USER_NAME && \ sed -i "/root\tALL=(ALL:ALL) ALL/a"${YOUR_USER_NAME}"\tALL=(ALL:ALL) ALL" /etc/sudoers && \ echo "source /home/${YOUR_USER_NAME}/Ascend/ascend-toolkit/set_env.sh" >> /home/"$YOUR_USER_NAME"/.bashrc && \ echo "export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/common/:/usr/local/Ascend/driver/lib64/driver/:${LD_LIBRARY_PATH}" >> /home/"$YOUR_USER_NAME"/.bashrc && \ ssh-keygen -A CMD ["/bin/bash", "/home/"${YOUR_USER_NAME}"/bin/entrypoint.sh"]
在 dockerfile 所在目录下执行以下命令,即可创建镜像
docker build -t your_image_name:your_image_tag .
创建容器启动的入口脚本 entrypoint.sh 并映射到容器内 ~/bin/ 目录下
entrypoint.sh
~/bin/
# /bin/bash # define your var your_user_name="XXX" your_password="XXX" # Create passwd echo "${your_user_name}:${your_password}" | chpasswd # Add to group 1000(HwHiAiUser) to use npu cat /etc/passwd | awk -F ":" '{print $4}' | grep 1000 if [ $? -ne 0 ] then groupadd -g 1000 HwHiAiUser useradd -u 1000 -g HwHiAiUser -ms /bin/bash HwHiAiUser fi usermod -a -G 1000 ${your_user_name} # For jumper if [ $(grep -c "HostkeyAlgorithms +ssh-rsa" /etc/ssh/sshd_config) -eq 0 ] then echo "HostkeyAlgorithms +ssh-rsa" >> /etc/ssh/sshd_config fi if [ ! -d /run/sshd ] then mkdir /run/sshd fi /usr/sbin/sshd -D
来自官方文档的简介:Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它是解锁精简高效的开发和部署体验的关键。Compose 简化了对整个应用程序堆栈的控制,使您可以在一个 YAML 配置文件中轻松管理服务、网络和存储。然后,使用一条命令,可以从该配置文件创建并启动所有服务。
它还具有用于管理应用程序整个生命周期的命令:
启动、停止和重建服务
查看正在运行的服务的状态
流式传输正在运行的服务的日志输出
在服务上运行一次性命令
优点:yaml 配置文件中配置项清晰灵活,再也不用担心忘记容器启动的配置了
裸机环境中已安装 docker-compose,可直接使用 docker-compose 命令,安装部分供大家参考
使用手动安装 compose cli 插件
下载 compose cli 插件
# 选择一个合适的路径存放 compose DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins # 更多不同框架/版本的 docker compose 地址:https://github.com/docker/compose/releases curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-aarch64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
Note
此命令下载 Docker Compose 的最新版本并为$HOME目录下的活动用户安装 Compose
$HOME
赋予可执行权限
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
compose 支持 compose.yaml, compose.yml,docker-compose.yaml,docker-compose.yml
compose.yaml
compose.yml
docker-compose.yaml
docker-compose.yml
配置项与 docker run 的参数含义一致,但 yaml 方式更适合管理
需更改变量 list: your_service_name your_image_name your_container_name your_local_volume your_docker_volume your_port your_host_name 可用npu卡号 /dev/davinci1
需更改变量 list:
services: your_service_name: image: your_image_name container_name: your_container_name volumes: # 挂载宿主机某目录到容器内用户home目录,以同步容器内更改 # 保证 ~/bin/entrypoint.sh 文件的映射路径正确 - /your_local_volume:/your_docker_volume # ----- 此处保持不变 ----- # - /usr/local/dcmi:/usr/local/dcmi - /usr/local/bin/npu-smi:/usr/local/bin/npu-smi - /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 - /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info - /etc/ascend_install.info:/etc/ascend_install.info # ---------------------- # ports: # 映射22端口,方便 ssh 远程连接容器 - your_port:22 # 可添加更多端口映射 - 8008:8008 restart: unless-stopped hostname: your_host_name tty: true devices: # 此处更改为可用的 NPU 卡号,可通过 npu-list 查询卡的占用状态 - /dev/davinci1 - /dev/davinci_manager - /dev/devmm_svm - /dev/hisi_hdc cap_add: - SYS_PTRACE shm_size: 20gb
临时启动(运行一次)
docker-compose -p <project-name> up
后台运行(非 down 或强制 rm 一直保持运行)
docker-compose -p <project-name> up -d
docker-compose -p <project-name> down
project-name 默认的是 yaml 配置文件上一级目录的名称,为防止公用裸机上有使用的目录名称一致,导致 project 名称重复,从而带来不同 project 启动的容器互抢的问题,最好指定 project-name。
docker exec -it your_container_name /bin/bash
进入容器后,再在自己的用户目录下安装 CANN toolkit 等包,即可使用 npu 开发了。
安装 CANN toolkit 请参考昇腾虚拟机固件与驱动安装,忽略其中驱动的安装。
更多 docker compose 相关指令请参考官方文档
The text was updated successfully, but these errors were encountered:
感谢梦晴总结,有几个建议可以修改下:
Sorry, something went wrong.
感谢梦晴总结,有几个建议可以修改下: 在dockerfile和脚本里,把需要修改的userid,groupid,usename,passwd之类的,可以改成变量放到最上面,或者直接使用环境变量,这样使用起来修改不会遗漏。 docker-compose是一个程序,可以共用,可以放到bin目录下,就不用大家复制或者下载了。
done
No branches or pull requests
目标
在团队公用的昇腾裸机上清晰、高效地创建和管理昇腾 NPU 环境的 docker 容器,方便大家在隔离环境中开发。
dockerfile、docker-compose.yaml 等文件来自 @hipudding 感谢!
前置条件:昇腾裸机已安装 docker 及 npu 驱动
1. docker镜像
编写 docker file
通过 dockerfile 创建镜像
在 dockerfile 所在目录下执行以下命令,即可创建镜像
docker build -t your_image_name:your_image_tag .
准备容器入口脚本
创建容器启动的入口脚本
entrypoint.sh
并映射到容器内~/bin/
目录下2. docker compose
docker compose 简介
它还具有用于管理应用程序整个生命周期的命令:
启动、停止和重建服务
查看正在运行的服务的状态
流式传输正在运行的服务的日志输出
在服务上运行一次性命令
优点:yaml 配置文件中配置项清晰灵活,再也不用担心忘记容器启动的配置了
安装 docker compose 插件
裸机环境中已安装 docker-compose,可直接使用 docker-compose 命令,安装部分供大家参考
使用手动安装 compose cli 插件
下载 compose cli 插件
Note
此命令下载 Docker Compose 的最新版本并为
$HOME
目录下的活动用户安装 Compose赋予可执行权限
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
YAML 配置文件
compose 支持
compose.yaml
,compose.yml
,docker-compose.yaml
,docker-compose.yml
配置项与 docker run 的参数含义一致,但 yaml 方式更适合管理
启动容器
临时启动(运行一次)
后台运行(非 down 或强制 rm 一直保持运行)
关闭容器
为什么需要指定 project-name ?
project-name 默认的是 yaml 配置文件上一级目录的名称,为防止公用裸机上有使用的目录名称一致,导致 project 名称重复,从而带来不同 project 启动的容器互抢的问题,最好指定 project-name。
进入容器
docker exec -it your_container_name /bin/bash
进入容器后,再在自己的用户目录下安装 CANN toolkit 等包,即可使用 npu 开发了。
更多 docker compose 相关指令请参考官方文档
The text was updated successfully, but these errors were encountered: