Skip to content

在开发机内使用 Docker

如需在开发机内部使用 Docker,必须在创建开发机时勾选 Docker 容器。启用该功能后,可在开发机内部执行拉取镜像、启动容器、保存容器为镜像等操作。

NOTE

在该场景下,开发机为主容器,您在开发机内部启动的容器与主容器为互相隔离的环境,需要自行挂载 GPU 和文件存储目录。

计算资源可用性

开发机(主容器)将固定保留 10% 的资源。剩余 90% 的 CPU 和内存资源将分配给开发机内部的容器。

如果在开发机内启动多个容器,这些容器会共享 CPU 和内存资源。

GPU 可用性

开发机(主容器)将不会保留 GPU 资源,所有 GPU 资源供将分配给开发机内部的容器。

如果在开发机内启动多个容器,这些容器会共享 GPU 资源。

在开发机内启动容器时,必须使用 --gpus=all 挂载全部 GPU。

NOTE

由于全部 GPU 已挂载至开发机内部容器,因此开发机(主容器内)无法直接使用 nvidia-smi 命令。

存储资源可用性

在开发机内启动容器时,可以使用 -v 选项挂载主容器上的文件存储。

例如,-v=/mnt:/mnt 将主容器的 /mnt 目录挂载到容器内的 /mnt 挂载点。

IMPORTANT

开发机内部容器仅能挂载智算云平台提供的共享存储,无法挂载主容器的本地目录。

租户镜像仓库

创建租户后,平台自动为租户生成租户的镜像仓库。租户的镜像仓库地址可从开发机 SSH banner 中获取。

地址格式:

cr.infini-ai.com/<some-id>

示例:

cr.infini-ai.com/xy68ab

启动容器

您可以拉取公开镜像。

shell
docker pull nvidia/cuda:12.0.1-cudnn8-runtime-ubuntu22.04

或从智算云控制台镜像中心获取镜像地址,支持拉取预置镜像和自定义镜像。

shell
#拉取平台预置的 CUDA 镜像
docker pull cr.infini-ai.com/infini-ai/cuda:12.2.2-cudnn8-devel-ubuntu20.04

使用 CUDA 镜像,启动一个带有 GPU 的 Docker 容器。

shell
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% 的一半。

shell
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

保存镜像时,在共享文件存储中保存的内容不会提交到镜像中。

命令如下:

shell
#查询正在运行的容器ID​
docker ps​
# 将容器保存为指定镜像​
docker commit <container_id> <image_name>:<version>
# 保存新镜像​
docker save -o <new_image_name>.tar <image_name>:<version>
# 将新镜像上传至镜像仓库​
docker push <image_name>:<version>

示例如下:

bash
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