AI开发平台ModelArts-使用ModelArts VS Code插件进行模型开发(Ascend):步骤5:使用SDK提交训练作业

时间:2023-11-01 16:25:50

步骤5:使用SDK提交训练作业

备注:本地调测完成后可以提交训练作业。因为数据在Notebook中,设置InputData中“is_local_source”的参数为“True”,会自动将本地数据同步上传到OBS中。

步骤如下:

  1. “/home/ma-user/work/models/official/cv/resnet/”下创建train_notebook.py,
  2. 拷贝代码至train_notebook.py,
  3. 运行train_notebook.py,进行训练作业提交。

    train_instance_type表示训练的资源规格,每个region的资源规格可能是不同的,可以通过【2. 查询资源规格】查询对应的资源规格信息。

# train_notebook.py# 导入ModelArts SDK的依赖,并初始化Sessionfrom modelarts.train_params import TrainingFilesfrom modelarts.train_params import OutputDatafrom modelarts.train_params import InputDatafrom modelarts.estimatorV2 import Estimatorfrom modelarts.session import Sessionsession = Session()# 样例中为了方便默认创建一个OBS桶,推荐将调测所需要传输的文件统一放到`${default_bucket}/intermidiate`目录下,也可以按照注释代码自行指定obs_bucket = session.obs.get_default_bucket()print("Default bucket name: ", obs_bucket)default_obs_dir = f"{obs_bucket}/intermidiate"#default_obs_dir = "obs://your-bucket-name/folder-name"# 本地的工程代码文件夹路径code_dir_local = "/home/ma-user/work/models/official/cv/resnet/" #@param {type:"string"}# 代码的启动文件名称boot_file = "train.py" #@param {type:"string"}train_file = TrainingFiles(code_dir=code_dir_local, boot_file=boot_file)# 本地数据集路径local_data_path = "/home/ma-user/work/models/dataset/flower_photos" #@param {type:"string"}# 模型输出保存路径output_local = "/home/ma-user/work/models/official/cv/resnet/output" #@param {type:"string"}# 模拟训练过程中模型输出回传至指定OBS的路径,需要以"/"结尾obs_output_path = f"{default_obs_dir}/mindspore_model/output/"# 指定一个obs路径用于存储输出结果output = [OutputData(local_path=output_local, obs_path=obs_output_path, name="output")]# 模拟训练过程中模训练日志回传至指定OBS的路径,需要以"/"结尾log_obs_path = f"{default_obs_dir}/mindspore_model/logs/"# 训练所需的代码路径,代码会自动从本地上传至OBScode_obs_path = f"{default_obs_dir}/mindspore_model/"data_obs_path = f"{default_obs_dir}/dataset/flower_photos/"# sdk会将代码自动上传至OBS,并同步到训练环境train_file = TrainingFiles(code_dir=code_dir_local, boot_file=boot_file, obs_path=code_obs_path)# 指定OBS中的数据集路径,会自动将local_path数据上传至obs_path,用户可以在代码中通过 --data_url接收这个数据集路径input_data = InputData(local_path=local_data_path, obs_path=data_obs_path, is_local_source=True, name="data_url")from modelarts.service import SWRManagementimage_organization = SWRManagement(session).get_default_namespace()# image_organization = “your-swr-namespace-name”print("Default image_organization:", image_organization)image_name = "mindspore-image-models-image" #@param {type:"string"}image_tag = "1.0.0" #@param {type:"string"}import osENV_NAME=os.getenv('ENV_NAME')# 启动训练任务:使用user_command(shell命令)方式启动训练任务# 注意:训练启动默认的工作路径为"/home/ma-user/modelarts/user-job-dir",而代码上传路径为"./resnet/${code_dir}"下# --enable_modelarts=True 该代码仓已适配Modelartsestimator = Estimator(session=session,                      training_files=train_file,                      outputs=output,                      user_image_url=f"{image_organization}/{image_name}:{image_tag}", # 自定义镜像swr地址,由镜像仓库组织/镜像名称:镜像tag组成                      user_command=f'cd /home/ma-user/modelarts/user-job-dir/ && /home/ma-user/anaconda3/envs/MindSpore/bin/python ./resnet/train.py --net_name=resnet50 --dataset=imagenet2012 --enable_modelarts=True --class_num=5 --config_path=./resnet/config/resnet50_imagenet2012_config.yaml --epoch_size=10 --device_target="Ascend" --enable_modelarts=True', # 执行训练命令                      train_instance_type="modelarts.p3.large.public", # 虚拟资源规格                      train_instance_count=1, # 节点数,适用于多机分布式训练,默认是1                      #pool_id='若指定专属池,替换为页面上查到的poolId',同时修改资源规格为专属池专用的虚拟子规格                      log_url=log_obs_path                     )# job_name是可选参数,可不填随机生成工作名job_instance = estimator.fit(inputs=[input_data],                             job_name="modelarts_training_job_with_sdk_by_command_v01")

表1 Estimator参数说明

参数名称

参数说明

session

modelarts session

training_files

训练代码的路径和启动文件

user_image_url

自定义镜像swr地址,由镜像仓库组织/镜像名称:镜像tag组成

user_command

执行训练命令

train_instance_type

本地调测'local'或云端资源规格

train_instance_count

节点数

log_url

日志输出路径

job_name

作业名称,不可以重复

support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0143.html