新老用户进群领券,100% 有券等你来冲!新老用户进群领券,100% 有券等你来冲! 体验按量付费开发机!立即领券
Skip to content

在开发机内使用 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

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

启动容器

您可以拉取公开镜像。

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>

示例如下:

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

推送至租户镜像仓库

购买预付费资源(包两年/包年/包月/包日)的租户将获得私有的租户镜像仓库。平台自动为租户生成租户的镜像仓库地址,免费提供 200 GiB 的存储空间。

您可以通过已开启 「Docker 容器」功能的开发机推送镜像至租户私有镜像仓库。

  1. 标记镜像: 标记仓库路径和标签,请使用 docker tag

    格式:

    bash
    docker tag <loaded_image_name>:<version> <repository>/<image_name>:<version>

    示例:

    bash
    docker tag sd-webui:v1.1-1 cr.infini-ai.com/te-d397fngp1xye2h3q/sd-webui:v1.1-1
  2. 推送镜像: 使用 docker push 将镜像推送到仓库:

    格式:

    bash
    # 开发机内默认登录租户镜像,无需再次 docker login
    docker push <repository>/<image_name>:<version>

    示例:

    bash
    docker 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 加载镜像,再推送到租户镜像仓库。