更新时间:2023-08-16 GMT+08:00

创建训练作业

示例代码

在ModelArts notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权

ModelArts SDK不支持通过在AI Gallery中订阅的算法创建训练作业。

  • 示例一:提交常用框架训练作业

    Estimator中同时指定framework_type和framework_version,会提交一个常用框架训练作业。

    from modelarts.session import Session
    from modelarts.train_params import TrainingFiles
    from modelarts.train_params import OutputData
    from modelarts.train_params import InputData
    from modelarts.estimatorV2 import Estimator
    session = Session()
    #训练脚本里接收的参数,请根据实际情况填写
    
    parameters = [{"name": "mod", "value":"gpu"}, 
                  {"name": "epoc_num", "value":2}]
    estimator = Estimator(session=session,
                          training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                          outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                          parameters=parameters,
                          framework_type='PyTorch',                      # 常用框架类型
                          framework_version='PyTorch-1.4.0-python3.6',   # 常用框架版本
                          train_instance_type="modelarts.p3.large.public",
                          train_instance_count=1,
                          log_url="obs://bucket_name/log/",
                          env_variables={"USER_ENV_VAR": "customize environment variable"},
                          working_dir="/home/ma-user/modelarts/user-job-dir",
                          local_code_dir="/home/ma-user/modelarts/user-job-dir",
                          job_description='This is a image net train job')
    job_instance = estimator.fit(inputs=[InputData(obs_path="obs://bucket_name/input/", name="data_url")],
                                 job_name="job_name_1")
  • 示例二:提交自定义镜像训练作业

    Estimator中同时指定user_image_url和user_command,会提交自定义镜像训练作业,并使用自定义启动命令来启动训练任务。

    from modelarts.session import Session
    from modelarts.train_params import TrainingFiles
    from modelarts.train_params import OutputData
    from modelarts.train_params import InputData
    from modelarts.estimatorV2 import Estimator
    session = Session()
    #训练脚本里接收的参数,请根据实际情况填写
    
    parameters = [{"name": "mod", "value":"gpu"}, 
                  {"name": "epoc_num", "value":2}]
    estimator = Estimator(session=session,
                          training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                          outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                          parameters=parameters,
                          user_image_url="sdk-test/pytorch1_4:1.0.1",     # 自定义镜像地址
                          user_command="/home/ma-user/anaconda3/envs/PyTorch-1.4/bin/python /home/ma-user/modelarts/user-job-dir/train/test-pytorch.py",  # 自定义启动命令
                          train_instance_type="modelarts.p3.large.public",
                          train_instance_count=1,
                          log_url="obs://bucket_name/log/",
                          env_variables={"USER_ENV_VAR": "customize environment variable"},
                          working_dir="/home/ma-user/modelarts/user-job-dir",
                          local_code_dir="/home/ma-user/modelarts/user-job-dir",
                          job_description='This is a image net train job')
    job_instance = estimator.fit(inputs=[InputData(obs_path="obs://bucket_name/input/", name="data_url")],
                                 job_name="job_name_2")
  • 示例三:向专属资源池提交训练作业
    from modelarts.session import Session
    from modelarts.train_params import TrainingFiles
    from modelarts.train_params import OutputData
    from modelarts.train_params import InputData
    from modelarts.estimatorV2 import Estimator
    session = Session()
    #训练脚本里接收的参数,请根据实际情况填写
    
    parameters = [{"name": "mod", "value":"gpu"}, 
                  {"name": "epoc_num", "value":2}]
    estimator = Estimator(session=session,
                          training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                          outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                          parameters=parameters,
                          framework_type='PyTorch',                       
                          framework_version='PyTorch-1.4.0-python3.6',    
                          pool_id="your pool id",                                 # 专属资源池id
                          train_instance_type="modelarts.pool.visual.xlarge",     # 专属池的虚拟子规格
                          train_instance_count=1,
                          log_url="obs://bucket_name/log/",
                          env_variables={"USER_ENV_VAR": "customize environment variable"},
                          working_dir="/home/ma-user/modelarts/user-job-dir",
                          local_code_dir="/home/ma-user/modelarts/user-job-dir",
                          job_description='This is a image net train job')
    job_instance = estimator.fit(inputs=[InputData(obs_path="obs://bucket_name/input/", name="data_url")],
                                 job_name="job_name_3")
  • 示例四:使用数据集创建训练作业
    from modelarts.session import Session
    from modelarts.train_params import TrainingFiles
    from modelarts.train_params import OutputData
    from modelarts.train_params import InputData
    from modelarts.estimatorV2 import Estimator
    session = Session()
    #训练脚本里接收的参数,请根据实际情况填写
    parameters = [{"name": "model_name", "value":"s"}, 
                  {"name": "batch-size", "value": 32},
                  {"name": "epochs", "value":100},
                  {"name": "img-size", "value":"640,640"} ]
    estimator = Estimator(session=session,
                          training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                          outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                          parameters=parameters,
                          framework_type='PyTorch',                       # 常用框架类型
                          framework_version='PyTorch-1.4.0-python3.6',    # 常用框架版本
                          train_instance_type="modelarts.p3.large.public",
                          train_instance_count=1,
                          log_url="obs://bucket_name/log/",
                          working_dir="/home/ma-user/modelarts/user-job-dir",
                          local_code_dir="/home/ma-user/modelarts/user-job-dir",
                          job_description='This is a image net train job')
    job_instance = estimator.fit(dataset_id="your dataset id",
                                 dataset_version_id="your dataset version id",
                                 job_name="job_name_5")

参数说明

表1 Estimator请求参数说明

参数

是否必选

类型

描述

session

Object

会话对象,初始化方法请参考Session鉴权

training_files

TrainingFiles Object

训练脚本在OBS中的路径,具体请参考TrainingFiles初始化

outputs

Array of OutputData objects

训练的输出位置信息,具体请参考OutputData初始化

parameters

JSON Array

训练任务的运行参数。格式为

[{"name":"your name", "value": "your value"}],value的值可以是string,也可以是int。

train_instance_type

String

训练作业选择的资源规格,请参考查询资源规格列表

train_instance_count

int

训练作业计算节点个数。

framework_type

String

训练作业选择的引擎规格,请参考查询引擎规格列表

framework_version

String

训练作业选择的引擎版本,请参考查询引擎规格列表

user_image_url

String

自定义镜像训练作业的自定义镜像的SWR-URL。

user_command

String

自定义镜像训练作业的启动命令。

log_url

String

训练作业日志的保存位置,是一个OBS路径,如"obs://xx/yy/zz/"。

local_code_dir

String

算法的代码目录下载到训练容器内的本地路径。规则:

  • 必须为/home下的目录。
  • v1兼容模式下,当前字段不生效。
  • 当code_dir以file://为前缀时,当前字段不生效。

working_dir

String

运行算法时所在的工作目录。规则:v1兼容模式下,当前字段不生效。

job_description

String

训练作业的描述。

volumes

JSON Array

训练作业挂载卷信息,格式参考:

[{

"nfs": {

"local_path": "/xx/yy/zz",

"read_only": False,

"nfs_server_path": "xxx.xxx.xxx.xxx:/"

}

}]

env_variables

Dict

训练作业的环境变量。

pool_id

String

训练作业选择的资源池ID。可在ModelArts管理控制台,单击左侧“专属资源池”,在专属资源池列表中查看资源池ID。

表2 TrainingFiles初始化参数说明

参数

是否必选

类型

描述

code_dir

String

训练作业的代码目录,是一个OBS路径,需要以"obs:/"开头,如"obs://xx/yy/"。

boot_file

String

训练作业的代码启动文件,需要在代码目录下,可填写相对路径,如"boot_file.py",也可填写绝对路径,如"obs://xx/yy/boot_file.py"。

表3 OutputData初始化参数说明

参数

是否必选

类型

描述

obs_path

String

数据实际输出到OBS的路径。

name

String

输出数据的关键字参数名称,如"output_dir"。

表4 fit请求参数说明

参数

是否必选

类型

描述

inputs

Array of InputData Object

保存在OBS中的训练作业输入数据。inputs和(dataset_id, dataset_version_id)两者不可同时出现。

wait

Boolean

是否等待训练作业结束,默认为False。

job_name

String

训练作业名称。

show_log

Boolean

作业提交成功后,是否输出训练作业的日志,默认为False。

dataset_id

String

训练作业的数据集ID。需要与dataset_version_id同时出现,但是不可与inputs同时出现。

dataset_version_id

String

训练作业的数据集版本ID。需要与dataset_id同时出现,但是不可与inputs同时出现。

表5 InputData初始化参数说明

参数

是否必选

类型

描述

obs_path

String

训练作业需要的数据集OBS路径,如"obs://xx/yy/"。

name

String

输入数据的关键字参数名称,如"data_url"。

表6 训练作业创建成功响应说明

参数

类型

描述

TrainingJob

Object

训练对象,该对象包含job_id等属性,对训练作业的查询、更新、删除等操作时,可通过job_instance.job_id获取训练作业ID。

表7 调用训练接口失败响应参数

参数

类型

描述

error_msg

String

调用失败时的错误信息,调用成功时无此字段。

error_code

String

调用失败时的错误码,具体请参见错误码,调用成功时无此字段。

error_solution

String

调用失败时的提示解决信息,调用成功时无此字段。