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


train_instance_type='local'
if subprocess.call('nvidia-smi') == 0:
train_instance_type = 'local_gpu'
estimator = TensorFlow(entry_point='albert_ner.py',
source_dir='.',
train_instance_type=train_instance_type,
train_instance_count=1,
hyperparameters=hyperparameters,
role=role,
framework_version='1.15.2',
py_version='py3',
script_mode=True)
inputs = {'training': f'file:///home/ec2-user/SageMaker/albert-chinese-ner/data/'}
estimator.fit(inputs)
这里我们可以注意到estimator.fit()传入的参数与BYOC略有不同 , 这两个写法其实是等价的 , 事实上 , 这里的写法更规范一些 , 按照Amazon SageMaker的文档 , 输入数据可以有多个通道(Channel) , 默认的通道是training , 在本文的代码中 , 训练、验证等过程其实都是从training通道中读取的数据 , 所以更规范的做法是 , 我们应该额外增加一个通道validation , 用来存放验证数据 。
训练启动后 , 我们可以看到训练的日志输出 , 以及监控本机的GPU、CPU、内存等的使用率等情况 , 以确认程序可以正常工作 。
如果在此过程中需要进入正在运行的容器内调试 , 我们可以使用docker ps命令获取当前正在运行的容器ID , 并使用docker exec -it /bin/bash进入容器内进行调试 。 另外 , 我们使用docker images命令可以看到Amazon SageMaker自动下载了一个名为
763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-training:1.15.2-gpu-py3的镜像 , 该镜像是由Amazon SageMaker预编译的 。
机器之心|使用AmazonSageMaker运行中文命名实体识别
本文插图

3.2 Amazon SageMaker测试
在本地测试完成后 , 我们可以使用Amazon SageMaker进行测试:第一步 , 上传数据到Amazon S3 。 第二步 , 指定执行的角色 , 这里我们假设您是在Amazon SageMaker Notebook上执行的 , 如果是其他环境 , 您可能需要手动指定角色的ARN 。 第三步 , 设定超参数 , 这里需要对应到您程序中所需的超参数 。 第四步 , 设定训练机型为ml.p2.xlarge(支持GPU) 。 第五步 , 创建一个名为TensorFlow的Estimator , 这里需要传入训练入口脚本(entry_point)、源代码路径(source_dir)、之前获得的角色、训练机型、机器数量、TensorFlow版本、Python版本、超参数等 。 第六步 , 启动训练 , 这里需要传入训练数据的位置 , 在Amazon SageMaker模式下 , 训练数据的位置需要设置成Amazon S3路径 。
inputs = sagemaker.Session().upload_data(path='/home/ec2-user/SageMaker/albert-chinese-ner/data', key_prefix='DEMO-tensorflow-albert-chinese-ner')
estimator = TensorFlow(entry_point='albert_ner.py',
source_dir='.',
train_instance_type='ml.p2.xlarge',
train_instance_count=1,
hyperparameters=hyperparameters,
role=role,
framework_version='1.15.2',
py_version='py3',
script_mode=True)
estimator.fit({'training': inputs})
训练启动后 , 我们可以在Amazon SageMaker控制台看到这个训练任务 , 点进详情可以看到训练的详情 , 日志输出 , 以及监控机器的GPU、CPU、内存等的使用率等情况 , 以确认程序可以正常工作 。
在这里 , source_dir我们设置的是本地代码路径 , Amazon SageMaker会自动将该路径下的所有代码和数据拷贝进容器中 。 此外 , BYOS模式还支持git路径作为代码路径 , 使用方法如下:
git_config = {'repo': 'https://github.com/whn09/albert-chinese-ner.git', 'branch': 'master'}


推荐阅读