GCP Vertex AI 训练:自动打包的自定义训练作业产出巨大 Docker 图片

GCP Vertex AI Training: Auto-packaged Custom Training Job Yields Huge Docker Image

我正在尝试 运行 Cloud Platform 的 Vertex AI 训练服务中的自定义训练作业。

该工作基于 a tutorial from Google that fine-tunes a pre-trained BERT model(来自 HuggingFace)。

当我使用 gcloud CLI 工具将我的训练代码自动打包成 Docker 图像并将其部署到 Vertex AI 训练服务时,如下所示:

$BASE_GPU_IMAGE="us-docker.pkg.dev/vertex-ai/training/pytorch-gpu.1-7:latest"
$BUCKET_NAME = "my-bucket"

gcloud ai custom-jobs create `
--region=us-central1 `
--display-name=fine_tune_bert `
--args="--job_dir=$BUCKET_NAME,--num-epochs=2,--model-name=finetuned-bert-classifier" `
--worker-pool-spec="machine-type=n1-standard-4,replica-count=1,accelerator-type=NVIDIA_TESLA_V100,executor-image-uri=$BASE_GPU_IMAGE,local-package-path=.,python-module=trainer.task"

...我最终得到了一个大约 18GB (!) 的 Docker 图像,需要很长时间才能上传到 GCP 注册表。

同意 the base image is around 6.5GB额外的 >10GB 是从哪里来的?我有什么办法可以避免这种“图像膨胀”?

请注意,我的工作在 运行 时使用 datasets Python 包加载训练数据,AFAIK 不将其包含在自动打包的 docker 中图片。

UI中显示的图片尺寸为图片的虚拟尺寸。它是将通过网络下载的压缩总图像大小。一旦图像被拉出,它就会被提取出来,结果尺寸会更大。在这种情况下,PyTorch image's virtual size 为 6.8 GB,而实际大小为 17.9 GB。

此外,当执行 docker push 命令时,进度条会显示未压缩的大小。实际推送的数据量为compressed before sending,所以进度条不会反映上传的大小

要减小 docker 图像的大小,可以使用自定义容器。在这里,只能配置必要的组件,这将导致更小的 docker 图像。有关自定义容器的更多信息 here