用于创建运行在Amazon SageMaker上的容器的开源库。
sagemaker-training的Python项目详细描述
SageMaker培训工具包
使用Amazon SageMaker在Docker容器中训练机器学习模型。在
:书本:背景
Amazon SageMaker是数据科学和机器学习(ML)工作流的完全托管服务。 您可以使用amazonsagemaker来简化构建、培训和部署ML模型的过程。在
要训练模型,可以在运行训练代码的Docker container中包含训练脚本和依赖项。 容器提供了一个有效隔离的环境,确保了一致的运行时和可靠的培训过程。在
SageMaker培训工具包可以轻松添加到任何Docker容器中,使其与training models的SageMaker兼容。 如果使用prebuilt SageMaker Docker image for training,则此库可能已经包含在内。在
有关更多信息,请参阅Amazon SageMaker开发人员指南中关于using Docker containers for training的部分。在
:锤子和扳手:安装
要在Docker映像中安装此库,请在Dockerfile中添加以下行:
RUN pip3 install sagemaker-training
:计算机:用法
以下是简要的操作指南。 有关使用SageMaker培训工具包构建的自定义培训容器的完整工作示例,请参见the example notebooks。在
创建Docker图像并训练模型
- 在
编写一个训练脚本(例如
在train.py
)。在 - 在
Define a container with a Dockerfile,包括训练脚本和任何依赖项。在
训练脚本必须位于
^{pr2}$ 在/opt/ml/code
目录中。 环境变量SAGEMAKER_PROGRAM
定义/opt/ml/code
目录中的哪个文件用作训练入口点。 当训练开始时,解释器执行SAGEMAKER_PROGRAM
定义的入口点。 Python和shell脚本都受支持。在 - 在
构建并标记Docker映像。在
docker build -t custom-training-container .
在 - 在
使用Docker映像启动使用SageMaker Python SDK的培训作业。在
fromsagemaker.estimatorimportEstimatorestimator=Estimator(image_name="custom-training-container",role="SageMakerRole",train_instance_count=1,train_instance_type="local")estimator.fit()
要在SageMaker上使用图像训练模型,push the image to ECR并使用图像URI启动SageMaker培训作业。在
在
使用超参数将参数传递到入口点
训练作业提供的任何超参数都作为脚本参数传递到入口点。
sagemakerpythonsdk使用此特性向训练作业传递特殊的超参数,包括sagemaker_program
和{
- 在
在入口点脚本中实现参数解析器。例如,在Python脚本中:
importargparseif__name__=="__main__":parser=argparse.ArgumentParser()parser.add_argument("--learning-rate",type=int,default=1)parser.add_argument("--batch-size",type=int,default=64)parser.add_argument("--communicator",type=str)parser.add_argument("--frequency",type=int,default=20)args=parser.parse_args()...
在 - 在
用超参数开始训练工作。在
{"HyperParameters":{"batch-size":256,"learning-rate":0.0001,"communicator":"pure_nccl"}}
在
使用环境变量
入口点通常需要hyperparameters
中没有的附加信息。
SageMaker培训工具包将此信息作为环境变量写入脚本中。
例如,此培训作业包括training
和testing
频道:
fromsagemaker.pytorchimportPyTorchestimator=PyTorch(entry_point="train.py",...)estimator.fit({"training":"s3://bucket/path/to/training/data","testing":"s3://bucket/path/to/testing/data"})
环境变量SM_CHANNEL_TRAINING
和SM_CHANNEL_TESTING
提供到通道的路径:
importargparseimportosif__name__=="__main__":parser=argparse.ArgumentParser()...# reads input channels training and testing from the environment variablesparser.add_argument("--training",type=str,default=os.environ["SM_CHANNEL_TRAINING"])parser.add_argument("--testing",type=str,default=os.environ["SM_CHANNEL_TESTING"])args=parser.parse_args()...
培训开始时,SageMaker培训工具包将打印所有可用的环境变量。有关提供的环境变量的完整列表,请参阅reference on environment variables。在
获取有关容器环境的信息
要获取有关容器环境的信息,请初始化一个Environment
对象。
Environment
提供对与培训作业相关的环境方面的访问,包括超参数、系统特性、文件系统位置、环境变量和配置设置。
它是培训期间容器环境的只读快照,不包含任何形式的状态。在
fromsagemaker_trainingimportenvironmentenv=environment.Environment()# get the path of the channel "training" from the `inputdataconfig.json` filetraining_dir=env.channel_input_dirs["training"]# get a the hyperparameter "training_data_file" from `hyperparameters.json` filefile_name=env.hyperparameters["training_data_file"]# get the folder where the model should be savedmodel_dir=env.model_dir# train the modeldata=np.load(os.path.join(training_dir,file_name))x_train,y_train=data["features"],keras.utils.to_categorical(data["labels"])model=ResNet50(weights="imagenet")...model.fit(x_train,y_train)#save the model to the model_dir at the end of trainingmodel.save(os.path.join(model_dir,"saved_model"))
执行入口点
要执行入口点,请调用entry_point.run()
。在
fromsagemaker_trainingimportentry_point,environmentenv=environment.Environment()# read hyperparameters as script argumentsargs=env.to_cmd_args()# get the environment variablesenv_vars=env.to_env_vars()# execute the entry pointentry_point.run(uri=env.module_dir,user_entry_point=env.user_entry_point,args=args,env_vars=env_vars)
如果入口点执行失败,trainer.train()
将把错误消息写入/opt/ml/output/failure
。否则,它会的写入文件/opt/ml/success
。在
:滚动:许可证
此库是根据Apache 2.0 License授权的。 有关详细信息,请查看LICENSE文件。在
:握手:参与
欢迎投稿! 请阅读我们的contributing guidelines 如果您要打开问题或提交请求。在
- 项目
标签: