用于创建运行在Amazon SageMaker上的容器的开源库。

sagemaker-training的Python项目详细描述


SageMaker

SageMaker培训工具包

Latest VersionSupported Python VersionsCode Style: Black

使用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图像并训练模型

  1. 编写一个训练脚本(例如train.py)。在

  2. Define a container with a Dockerfile,包括训练脚本和任何依赖项。在

    训练脚本必须位于/opt/ml/code目录中。 环境变量SAGEMAKER_PROGRAM定义/opt/ml/code目录中的哪个文件用作训练入口点。 当训练开始时,解释器执行SAGEMAKER_PROGRAM定义的入口点。 Python和shell脚本都受支持。在

    ^{pr2}$ 在
  3. 构建并标记Docker映像。在

    docker build -t custom-training-container .
    
  4. 使用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和{}。 SageMaker超参数的完整列表可用here。在

  1. 在入口点脚本中实现参数解析器。例如,在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()...
  2. 用超参数开始训练工作。在

    {"HyperParameters":{"batch-size":256,"learning-rate":0.0001,"communicator":"pure_nccl"}}

使用环境变量

入口点通常需要hyperparameters中没有的附加信息。 SageMaker培训工具包将此信息作为环境变量写入脚本中。 例如,此培训作业包括trainingtesting频道:

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_TRAININGSM_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 如果您要打开问题或提交请求。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图形Java仿射变换以旋转通用路径   IntelliJ IDEA中的java代码标记为编译器错误,在Eclipse中可以正常工作   java ArrayList的containsAll返回了错误的值   如何在安卓中的片段活动中添加java代码   java通过使用netbeans调用jbutton,将带有行的jbutton添加到jtable中   java在更新arrayAdapter/listView之前更新最终列表   java如何在另一个项目中导入包含AspectJ方面和注释的项目   为什么我的java布尔测试总是失败?   Eclipse中的java自动激活   在Bluetooth for Java(更具体地说是Android)之上是否有TCP/IP协议栈实现?   java Android Studio通过intent传递ArrayList并填充ListView