无本地V100 GPU时,如何构建用于ACI的GPU镜像并推送至ACR
解决方案
方案1:无需GPU环境构建(仅打包GPU依赖)
如果你的镜像只是基于NVIDIA官方CUDA/cuDNN镜像打包应用代码,不需要在构建阶段执行GPU相关编译任务,本地完全可以直接构建:
- 编写Dockerfile,基于NVIDIA官方GPU基础镜像(如
nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04) - 使用Azure CLI的ACR构建命令,将构建任务委托给ACR云端环境,无需本地GPU:
az acr build --registry your-acr-name --image gpu-app:v1 .
该命令会自动将本地代码上传到ACR,在云端完成构建后直接存入ACR,后续可直接用于ACI的GPU容器。
方案2:构建阶段需要GPU(编译GPU专属代码)
如果必须在构建过程中使用GPU(比如编译CUDA内核、运行模型训练/量化脚本),可选择以下两种方式:
方式A:使用带GPU的Azure VM作为构建节点
- 创建一台带有V100 GPU的Azure VM,选择支持GPU的虚拟机规格(如
Standard_NC6s_v3) - 在VM上安装Docker和Azure CLI,登录目标ACR:
az acr login --name your-acr-name
- 在VM上拉取代码,执行本地构建并推送到ACR:
docker build -t your-acr-name.azurecr.io/gpu-app:v1 . docker push your-acr-name.azurecr.io/gpu-app:v1
完成构建后可删除VM以节省成本。
方式B:使用ACR Tasks自定义GPU构建环境
ACR Tasks支持连接Azure虚拟机规模集(VMSS)作为自定义构建代理,适合重复构建需求:
- 创建包含V100 GPU的VMSS,确保安装Docker和ACR构建代理
- 在ACR中注册该VMSS作为构建代理池
- 提交构建任务时指定使用该GPU代理池:
az acr build --registry your-acr-name --image gpu-app:v1 --agent-pool your-gpu-agent-pool .
关于ACI内构建的替代说明
你之前考虑的ACI内构建确实复杂度高,需要配置Docker-in-Docker环境并赋予GPU权限,远不如上述云端构建方案高效可靠,不推荐采用。
内容的提问来源于stack exchange,提问作者dashesy
相关产品推荐
相关产品推荐

