机器之心|使用AmazonSageMaker运行中文命名实体识别( 二 )


1.1 创建Amazon SageMaker Notebook
我们首先要创建一个Amazon SageMaker Notebook , 笔记本实例类型最好选择ml.p2.xlarge , 这样就可以使用GPU进行训练的测试了 , 卷大小建议改成10GB或以上 , 因为运行该项目需要下载一些额外的数据 。
机器之心|使用AmazonSageMaker运行中文命名实体识别
本文插图

1.2 下载代码和数据
笔记本启动后 , 打开页面上的终端 , 执行以下命令下载代码:
cd ~/SageMaker
git clone https://github.com/whn09/albert-chinese-ner.git
执行以下命令下载和解压数据(数据来源见参考资料3):
cd ~/SageMaker/albert-chinese-ner
wget https://storage.googleapis.com/albert_zh/albert_base_zh_additional_36k_steps.zip
unzip albert_base_zh_additional_36k_steps.zip -d albert_base_zh
1.3 运行代码
我们需要进入一个虚拟环境tensorflow_p36 , 该环境预制了运行TensorFlow所需要的常用组件 , 运行run_train.sh进行训练 , 命令如下:
cd ~/SageMaker/albert-chinese-ner
source activate tensorflow_p36
./run_train.sh
如果出现下面的输出 , 说明运行结果正常 , 在实例类型为ml.p2.xlarge的笔记本中 , 训练速度可以达到23个样本/秒 , 如果是其他类型实例 , 速度可能有差异 。
机器之心|使用AmazonSageMaker运行中文命名实体识别
本文插图

2. 自定义容器(BYOC)
自定义容器需要经历准备Dockerfile , 创建训练的启动脚本 , 创建镜像并上传到Amazon ECR , 本地测试和Amazon SageMaker测试等步骤 。 完整执行过程见
tensorflow_bring_your_own.ipynb 。
2.1 准备Dockerfile
我们首先需要准备Dockerfile , 在其中安装TensorFlow程序运行必须的环境 , 拷贝所有代码到镜像中 。
FROM tensorflow/tensorflow:1.15.2-gpu-py3
ENV PATH="/opt/ml/code:$"
COPY ./ /opt/ml/code
WORKDIR /opt/ml/code
这里我们需要了解Amazon SageMaker对于容器内目录结构的要求 , 具体如下图所示 , 训练所需代码放到/opt/ml/code目录下 , 训练所需数据放到/opt/ml/input/data目录下 , 训练输出的模型放到/opt/ml/model目录下 , 训练结果文件或者日志文件放到/opt/ml/output目录下 , 训练超参数文件是由Amazon SageMaker自动生成的 , 在/opt/ml/input/config目录下 。
机器之心|使用AmazonSageMaker运行中文命名实体识别
本文插图

2.2 创建训练的启动脚本
Amazon SageMaker在训练时默认的启动脚本是train , 您可以将自己代码中的启动脚本命名为train , 但我们更建议您使用我们提供的启动脚本train , 该脚本是基于Python的 , 可以帮助您解析传入的超参数 , 并调用您代码中的实际启动脚本 。
2.3 创建镜像并上传到Amazon ECR
在准备好Dockerfile和启动脚本后 , 我们可以使用build_and_push.sh这个脚本创建镜像并上传到Amazon ECR 。 注意这个过程可能需要进行很多次 , 因为我们不可避免地要修改Dockerfile或者TensorFlow程序以使得它们可以正常工作 。 如果尚未调试完成 , 我们可以暂时不执行该脚本的最后一句docker push $ , 以避免频繁上传镜像到Amazon ECR 。
2.4 本地测试
在创建镜像完成后 , 我们可以使用Amazon SageMaker的本地模式进行本地测试:第一步 , 执行utils/setup.sh来初始化本地模式 。 第二步 , 指定执行的角色 , 这里我们假设您是在Amazon SageMaker Notebook上执行的 , 如果是其他环境 , 您可能需要手动指定角色的ARN 。 第三步 , 设定超参数 , 这里需要对应到您程序中所需的超参数 。 第四步 , 设定训练机型为local或者local_gpu(支持GPU) 。 第五步 , 创建Estimator , 这里需要传入之前获得的角色、训练机型、机器数量、镜像名称、超参数等 。 第六步 , 启动训练 , 这里需要传入训练数据的位置 , 在本地模式下 , 训练数据的位置可以设置成本地路径 。


推荐阅读