在开发机内使用 Docker
如需在开发机内部使用 Docker,必须在创建开发机时勾选 Docker 容器。启用该功能后,可在开发机内部执行拉取镜像、启动容器、保存容器为镜像等操作。
NOTE
在该场景下,开发机为主容器,您在开发机内部启动的容器与主容器为互相隔离的环境,需要自行挂载 GPU 和文件存储目录。
计算资源可用性
开发机(主容器)将固定保留 10% 的资源。剩余 90% 的 CPU 和内存资源将分配给开发机内部的容器。
如果在开发机内启动多个容器,这些容器会共享 CPU 和内存资源。
GPU 可用性
在开发机内启动容器时,可以使用 --gpus=all
挂载全部 GPU,开发机(主容器)内 GPU 资源依然可用。
如果在开发机内启动多个容器,这些容器会共享 GPU 资源。
NOTE
旧版开发机启用 Docker 功能时,开发机内部容器会独占全部 GPU。如遇到开发机(主容器)无法与内部容器共享 GPU 的情况,建议将开发机关机再开机,以完成版本更新。
存储资源可用性
在开发机内启动容器时,可以使用 -v
选项挂载主容器上的文件存储。
例如,-v=/mnt:/mnt
将主容器的 /mnt
目录挂载到容器内的 /mnt
挂载点。
IMPORTANT
开发机内部容器仅能挂载智算云平台提供的共享存储,无法挂载主容器的本地目录。
启动容器
您可以拉取公开镜像。
docker pull nvidia/cuda:12.0.1-cudnn8-runtime-ubuntu22.04
或从智算云控制台镜像中心获取镜像地址,支持拉取预置镜像和自定义镜像。
#拉取平台预置的 CUDA 镜像
docker pull cr.infini-ai.com/infini-ai/cuda:12.2.2-cudnn8-devel-ubuntu20.04
使用 CUDA 镜像,启动一个带有 GPU 的 Docker 容器。
docker run -it --gpus=all -v=/mnt:/mnt cr.infini-ai.com/infini-ai/cuda:12.2.2-cudnn8-devel-ubuntu20.04
如果对共享内存(/dev/shm
) 的大小有要求,可以使用 --shm-size
指定共享内存大小。共享内存默认值为 64MB
,最大值可调整至为开发机内存 90% 的一半。
docker run -it --shm-size=403g --gpus=all -v=/mnt:/mnt cr.infini-ai.com/infini-ai/cuda:12.2.2-cudnn8-devel-ubuntu20.04
TIP
- 使用
--gpus=all
挂载开发机所有的 GPU 设备。 - 使用
-v=/mnt:/mnt
将主容器的存储资源挂载至容器内。
保存容器为镜像
您可以在 Docker 容器中安装和部署一些软件,再将更新后的容器打包为一个新的镜像。
TIP
保存镜像时,在共享高性能存储中保存的内容不会提交到镜像中。
常用命令如下:
#查询正在运行的容器ID
docker ps
# 将容器保存为指定镜像
docker commit <container_id> <image_name>:<version>
# 保存新镜像
docker save -o <new_image_name>.tar <image_name>:<version>
示例如下:
wubaodong@is-c6xp7vsbjlkrsbgr-devmachine-0:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8be4cd831259 b3dc60511588 "/opt/nvidia/nvidia_…" 5 minutes ago Up 5 minutes distracted_keller
ba3cb11d8c01 b3dc60511588 "/opt/nvidia/nvidia_…" About an hour ago Up About an hour strange_bell
wubaodong@is-c6xp7vsbjlkrsbgr-devmachine-0:~$ cd /mnt/wubaodong/
wubaodong@is-c6xp7vsbjlkrsbgr-devmachine-0:/mnt/wubaodong$ ls
Megatron-LM bin dockerfiles gpt2 profiling-gpt
wubaodong@is-c6xp7vsbjlkrsbgr-devmachine-0:/mnt/wubaodong$ docker save -o dev.tar 8be4cd831259
Error response from daemon: No such image: 8be4cd831259
wubaodong@is-c6xp7vsbjlkrsbgr-devmachine-0:/mnt/wubaodong$ docker commit 8be4cd831259 dev-cuda:v1
sha256:a58ab0480f6f282e2e717642024db009214aacf44a28a6a423d570deff68c810
wubaodong@is-c6xp7vsbjlkrsbgr-devmachine-0:/mnt/wubaodong$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dev-cuda v1 a58ab0480f6f 3 seconds ago 3.67GB
nvidia/cuda 12.0.1-cudnn8-runtime-ubuntu22.04 b3dc60511588 2 months ago 3.62GB
推送至租户镜像仓库
购买预付费资源(包两年/包年/包月/包日)的租户将获得私有的租户镜像仓库。平台自动为租户生成租户的镜像仓库地址,免费提供 200 GiB 的存储空间。
您可以通过已开启 「Docker 容器」功能的开发机推送镜像至租户私有镜像仓库。
标记镜像: 标记仓库路径和标签,请使用
docker tag
:格式:
bashdocker tag <loaded_image_name>:<version> <repository>/<image_name>:<version>
示例:
bashdocker tag sd-webui:v1.1-1 cr.infini-ai.com/te-d397fngp1xye2h3q/sd-webui:v1.1-1
推送镜像: 使用
docker push
将镜像推送到仓库:格式:
bash# 开发机内默认登录租户镜像,无需再次 docker login docker push <repository>/<image_name>:<version>
示例:
bashdocker push cr.infini-ai.com/te-d397fngp1xye2h3q/sd-webui:v1.1-1
NOTE
- 如果您所属租户在不同可用区均购买了资源,请注意租户在不同可用区的镜像仓库的存储网络相互隔离,暂不支持同步(但共用同一个内网地址)。例如,可用区 A 向
cr.infini-ai.com/te-b914754427352251
推送镜像,平台自动映射到可用区 A 的镜像仓库,可用区 B 无法使用该镜像。 - 如果您有镜像 tar 包,可上传至开发机后使用
docker load
加载镜像,再推送到租户镜像仓库。