简要说明
训练一个 ML 模型有时需要复杂的设置和复制:
- 可能需要使用一些代码,这些代码托管在虚拟机的笔记本电脑上,您必须手动启动这些代码,并在完成后将其关闭。
- 每次再次训练时,您可能需要上传训练 dataset
- 当您想更改一个参数时,您需要深入研究您的代码
- 等等.
在本文中,我们将了解如何利用谷歌云人工智能平台实现FastAI文本分类器训练过程的自动化。.
在第二篇文章中,我们将介绍如何利用 AI Platform 和 TorchServe 部署此类模型。.
为了谁?
如果您正在进行一个需要多次训练 ML 模型的项目,并且厌倦了手动运行训练,那么您来对地方了。.
如果你厌倦了为培训管理虚拟机,只想把时间花在更有趣的事情上,比如阅读 Medium 上的文章,那你就来对地方了!
本文旨在介绍如何通过使用 AI Platform 训练 ML 模型来节省时间和资源。在本文中,我们将看到如何将其应用到我们的一个项目中,使用 FastAI.
本文旨在介绍如何通过使用 AI Platform 训练 ML 模型来节省时间和资源。在本文中,我们将看到如何将其应用到我们的一个项目中,使用 FastAI.
如果您想重现我们的工作,前提条件是
人工智能平台是谷歌云平台套件的一部分,我们还使用了其他服务来实现训练管道的自动化。以下是我们使用的 GCP 服务:
谷歌云 SDK、Docker 和 Nvidia-docker 需要在构建 Docker 镜像的机器上安装和设置。安装 Nvidia-docker 的目的是在机器的 GPU(如果有的话)上直接运行构建的 Docker 镜像,以确保代码中没有错误,并确保在人工智能平台上运行时,训练能按预期运行。.
正如我们稍后将看到的,Docker 镜像是根据 Nvidia-Cuda docker 镜像创建的,因此在构建镜像时会自动安装所需的 Nvidia 驱动程序。.
背景
在本文中,我们将看到如何利用 FastAI 自动训练文本分类器。FastAI 是一个允许用户利用 ULM FiT 方法创建强大模型的库。.

我们已经在 另一篇 Medium 文章, 因此,如果您想了解更多信息,我邀请您去看看。.
由于我们在本文中看到的内容适用于任何框架,因此您不必熟悉 FastAI 也可以继续阅读。您只需知道,除了训练标记的 dataset 之外,我们还使用了一个预训练模型来训练文本分类器。.
我们如何利用 AIPlatform 进行培训
要使用 AI Platform 自动训练模型,您需要在调用训练命令时指定哪些代码应在哪些环境中运行。最好的办法是创建一个包含所有训练代码及其环境的 Docker 镜像,这样每次要求 AI Platform 训练模型时,它只需从该镜像中创建一个容器即可。我们将在本部分了解我们是如何做到这一点的。.
将所有必要文件存储在 GCS 文件桶中
在创建包含训练内容的 Docker 镜像之前,我们必须考虑在训练 FastAI 文本分类器模型时会用到的文件。因此,我们决定将训练所需的所有文件存储在一个 GCS 文件桶中,按语言分隔成不同的文件夹,并为每个文件命名。.
然后,我们在训练代码中实现了一种方法(如下所示),只需指定目标语言作为参数,就能从 GCS 中检索到这些所需的文件。.

编写培训代码
在 GCS 中上传必要的文件后,我们创建了一个 repo 包含模型训练的代码,稍后将存储在 Docker Image 中。.
正如您在所链接的软件仓库中看到的,我们将训练代码分成了不同的文件,以正确处理所有训练流水线。.

我们定义了一个执行所有训练工作流程的文件,如下所示:
fastai_train.py 是唯一直接使用 FastAI 方法的文件,因此如果有人想在训练中部署其他框架,只需修改该文件(当然还有配置文件的内容)即可。.
下一步是创建一个 docker 映像,其中包含正确运行培训所需的一切。.
创建 Dockerfile
准备好训练代码后,需要创建一个 Dockerfile,并将其推送到谷歌容器注册中心,以便人工智能平台在正确的环境中检索和执行。.
由于模型的训练需要在 GPU 上运行,我们导入了 Nvidia-cuda Docker 镜像来创建自己的模型,因此已经安装了所有必要的驱动程序。.
# Dockerfile
FROM nvidia/cuda:10.2-devel
运行 apt-get update && apt-get install -y --no-install-recommends
wget
构建必备
运行 apt-get update && apt-get install -y --no-install-recommends
python3-dev
python3-setuptools
python3-pip
运行 pip3 install pip==20.3.1
工作目录 /root
# 创建包含代码和从 GCS 下载的模型的目录
运行 mkdir /root/trainer
运行 mkdir /root/models
# 复制要求
COPY requirements.txt /root/requirements.txt
# 安装 pytorch
运行 pip3 install torch==1.8.0
# 安装 requirements
运行 pip3 install -r requirements.txt
# 安装 google cloud sdk,主要用于使用 gsutil 导出模型。
运行 wget -nv
https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz &&
mkdir /root/tools &&
tar xvzf google-cloud-sdk.tar.gz -C /root/tools &&
rm google-cloud-sdk.tar.gz &&
/root/tools/google-cloud-sdk/install.sh --usage-reporting=false
-path-update=false --bash-completion=false
--禁用安装选项 &&
rm -rf /root/.config/* &&
ln -s /root/.config /config &&
# 删除 gcloud 创建的备份目录
rm -rf /root/tools/google-cloud-sdk/.install/.backup
# 复制文件
COPY trainer/fastai_train.py /root/trainer/fastai_train.py
COPY trainer/fastai_config.py /root/trainer/fastai_config.py
COPY trainer/args_getter.py /root/trainer/args_getter.py
COPY trainer/gcs_utils.py /root/trainer/gcs_utils.py
COPY trainer/training_workflow.py /root/trainer/training_workflow.py
# 路径配置
ENV PATH $PATH:/root/tools/google-cloud-sdk/bin
# 确保 gsutil 使用默认服务账户
RUN echo '[GoogleCompute]nservice_account = default' > /etc/boto.cfg
# 验证 GCP
CMD gcloud auth login
# 设置调用训练器的入口点。
ENTRYPOINT ["python3", "trainer/training_workflow.py"] (中文)
如上图所示,Dockerfile 会执行以下步骤来创建镜像:
创建图像并将其推送至 GCR
创建 Dockerfile 后,需要构建镜像并将其推送到 GCR。正如软件仓库中指定的那样,需要定义各种本地变量,例如 IMAGE_URI 在 GCR 中 地区 等。.
图像是通过运行此命令生成的:
docker build -f Dockerfile -t $IMAGE_URI .//
在将其推送到 GCR 之前,我们想确保在调用训练时一切正常,因此,由于我们的虚拟机有 GPU 可用,我们在推送之前运行了镜像,看看会发生什么:
docker run --runtime=nvidia $IMAGE_URI --epochs 1 --bucket-name $BUCKET_NAME
这一步不是必须的,但可以节省您很多时间,因为您可以直接看到代码中是否有错误。.
最后,我们运行以下命令将容器推送到 GCR、, $image_uri 是指在 GCR 中存储图像的 URI 的变量:
docker push $IMAGE_URI
运行并跟踪工作
完成前面的步骤后,只需在终端下达一个简单的命令,就可以调用模型的训练了。只需启用 Google Cloud SDK 并定义本地变量即可:
gcloud ai-platform 工作提交培训 $JOB_NAME --扩展级 BASIC_GPU --区域 $REGION --master-image-uri $IMAGE_URI -- --lang=法语 --epochs=10次 --bucket-name=$BUCKET_NAME --model-dir=$MODEL_DIR
该命令要求 AI Platform 使用 IMAGE_URI 在 GCR 中检索容器,然后在区域 REGION 中托管的机器的 GPU 上运行训练。.
我们在这里指定了各种参数,例如训练语言、epochs 数量、在 GCS 中上传和下载文件的桶名,以及存储训练模型的目录。这些参数将由 args_getter.py 文件获取
运行命令后,训练开始,并在人工智能平台控制台中创建了一个作业,这样我们就可以跟踪训练的进展情况,并查看机器运行日志。.
在人工智能平台控制台查看工作时,可以获取许多信息

任务完成后,训练好的模型会以 .pth 文件的形式保存在 GCS 存储桶中,同时保存的还有一个包含其性能的 .json 文件。.


我们决定分别考虑标签的结果,就好像我们对每个可能的标签都有一个二元分类器一样。.
由于我们使用的是 FastAI,因此可以在任何环境下调用 FastAI 的 load_learner() 方法直接加载模型文件。.

主要收获
使用人工智能平台自动训练模型使我们节省了大量时间,并使我们考虑到模型训练的各个方面,从而高效地将其投入生产。.
以下是我们从中获得的一些启示:
下一步是什么?
既然我们已经解释了如何自动训练模型,那么现在就可以向大家展示我们是如何设法让模型可以轻松调用,按需对文件进行分类的。.
请继续关注本文的第二部分,其中将介绍使用 AI Platform 和 TorchServe 部署训练有素的分类器所需的一切知识!
感谢您的阅读!
希望您今天有所收获,并对您未来的 ML 项目有所帮助。如果您对此主题有任何疑问或评论,请随时联系我们。.

博客







