华为云用户手册

  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 X-operating-sys-version 是 String 调用方操作系统版本,例如:Android 10。 X-device-fingerprint 是 String 调用方设备指纹,例如:156aysdna213sc50。 X-device-ip 否 String 调用方IP,例如:10.10.10.1。 X-agent 是 String 用户Agent信息,例如:Mozilla/5.0 (Linux; Android 10; Redmi K30 Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36。 X-L 否 String 用于国际化语言设置,例如:zh。 X-client-id 是 String 应用标识,注册应用后分配的ClientId。 X-tenant-id 否 String 租户id,ISV应用调用则为必填,需要将{domain_name}换成ISV通用域名{common_domain},请求Header参数中需要指定对应租户的tenant_id,并将X-client-id换成ISV应用模板的client_id。 表2 请求Body参数 参数 是否必选 参数类型 描述 email 是 String 邮箱。 password 是 String 密码。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 status String 登录流程状态标识。 枚举值: SUCCESS:登录成功 PASSWORD_WARN:密码快过期,需要调用密码过期强制修改密码接口设置密码 PASSWORD_EXPIRED:密码已过期,需要调用密码过期强制修改密码接口设置密码 ACCESS_DENIED:拒绝访问 MFA_AUTH:登录成功但需要进行二次认证,需要调用根据state_Token获取手机号接口、手机和短信验证码二次认证接口进行二次认证 session_token String 用户session_token,可使用该token调用单点登录接口获取sso_ticket,通过sso_ticket可以获取用户信息。 id_token String 本质上是一个JWT Token,包含了用户身份信息,默认2小时有效,支持可配置。 expire Integer session_token有效期,单位为秒,有效期内可以使用session_token获取sso_ticket。 state_token String 用户带有状态的令牌。 data String 返回说明。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误详情。
  • 密文解密过程 对密文进行BASE64解码。 byte[] encryptStr = Base64.getDecoder().decode(data); 使用AESKey进行解密。 Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); SecretKeySpec secretKey = new SecretKeySpec(加密密钥.getBytes(StandardCharsets.UTF_8), "AES"); cipher.init(2, secretKey); byte[] bytes = cipher.doFinal(encryptStr); 去掉rand_msg头部的16个随机字节,剩余的部分即为明文内容msg。 String dataStr = StringUtils.split(new String(bytes, StandardCharsets.UTF_8), "&")[1];
  • 签名校验/加解密术语 表1 术语 术语 说明 signature 消息签名,用于验证请求是否来自OneAccess,以防攻击者伪造。签名算法为HMAC-SHA256 + Base64。 AESKey AES算法的密钥,加密算法为AES/GCM/NoPadding + Base64。 msg 明文消息体,格式为JSON。 encrypt _msg 明文消息msg加密处理并进行Base64编码后的密文。
  • 签名校验 为了让企业应用确认事件推送来自OneAccess,OneAccess将事件推送给企业应用回调服务时,请求body体中包含请求签名并以参数signature标识,企业应用需要验证此参数的正确性后再解密,验证步骤如下: 计算签名。 计算签名由签名密钥、Nonce值(nonce)、时间戳(timestamp)、事件类型(eventType)、消息体(data)5部分组成,中间使用&进行连接。采用HMAC-SHA256 + Base64算法进行加密。以下为Java语言签名示例: String message = nonce + "&" + timestamp + "&" + eventType + "&" + data; Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKey = new SecretKeySpec(签名密钥.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); mac.init(secretKey); String newSignature = Base64.getEncoder().encodeToString(mac.doFinal(message.getBytes(StandardCharsets.UTF_8))); 比较计算的签名cal_signature与请求参数signature是否相等,相等则表示验证通过。 企业应用按照要求返回响应消息格式。
  • 明文加密过程 拼接明文字符串。明文字符串由16个字节的随机字符串、明文msg拼接组成,中间使用&进行连接。以下为Java语言示例: String dataStr = RandomStringUtils.random(16, true, false) + "&" + data; 对拼接后的明文字符串使用AESkey加密后,再进行Base64编码,获得密文encrypt_msg。以下为Java语言示例: Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); SecretKeySpec secretKey = new SecretKeySpec(加密密钥.getBytes(StandardCharsets.UTF_8), "AES"); cipher.init(1, secretKey); byte[] bytes = dataStr.getBytes(StandardCharsets.UTF_8); String ecnryptStr = Base64.getEncoder().encodeToString(cipher.doFinal(bytes));
  • 概述 Serverless GPU是一种高度灵活、高效利用、按需分配GPU计算资源的新兴云计算服务。GPU能力Serverless化,通过提供一种按需分配的GPU计算资源,在一定范围内有效地解决原有GPU长驻使用方式导致的低资源利用率、高使用成本和低弹性能力等痛点问题。本文将介绍Serverless GPU的详细功能和优势。(目前该功能仅支持华东-上海一) 传统GPU长驻使用方式存在许多问题,例如,需要提前规划好资源需求并容易造成资源浪费。而Serverless GPU则提供了一种更加灵活的方式来利用GPU计算资源,用户只需选择合适的GPU型号和计算资源规模,就可以帮助用户有效地解决GPU长驻使用方式导致的资源浪费、高成本、低弹性等问题,为用户提供更加便捷、高效的GPU计算服务,有效承载AI模型推理、AI模型训练、音视频加速生产、图形图像加速等加速工作负载。 GPU函数主要使用于:仿真、模拟、科学计算、音视频、AI和图像处理等场景下,使用GPU硬件加速,从而提高业务处理效率。 表1 GPU函数规格 卡型 vGPU 显存(GB) vGPU 算力(卡) 特点描述 Tesla 系列 T4 卡型 1~16 取值说明:必须是整数。 说明:由系统自动分配,无需手动配置 Tesla T4是一款独特的GPU产品,专为AI推理工作负载而设计,如处理视频,语音,搜索引擎和图像的神经网络。Tesla T4配备16GB GDDR6,GPU中集成320个Turing Tensor Core和2560个Turing CUDA Core,这款全新GPU具有突破性的性能,以及FP32/FP16/INT8/INT4等多种精度的运算能力,FP16的峰值性能为65T,INT8为130T,INT4为260T。 图1 GPU云产品选型决策指引 父主题: Serverless GPU使用介绍
  • 功能优势 函数计算为准实时推理工作负载提供以下功能优势: 原生Serverless使用方式 函数计算平台默认提供的按量GPU实例使用方式,会自动管理GPU计算资源。根据业务的请求数量,自动弹性GPU实例,最低0个实例,最大可配置实例数量。 规格最优 函数计算平台提供的GPU实例规格,根据业务需求,选择卡型并配置使用的显存和内存的大小,为您提供最贴合业务的实例规格。 成本最优 函数计算平台提供的按量付费能力,对于低GPU资源利用率的工作负载,降本幅度可达70%以上。
  • 示例代码 在ModelArts Notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参考Session鉴权。 1 2 3 from modelarts.session import Session session = Session() session.obs.download_dir(src_obs_dir="obs://bucket-name/dir1/", dst_local_dir="/home/ma-user/work/")
  • 参数说明 表1 请求参数说明 参数 是否必选 参数类型 描述 session 是 Object 会话对象。 src_obs_dir 是 String 下载的源OBS文件夹,必须以“obs://”作为前缀,文件夹后缀必须以"/"结尾。当下载的文件夹下有文件夹且内容为空时,对应路径下不产生对应空文件夹。 dst_local_dir 是 String 下载的目标本地文件夹,下载的目标本地文件夹后缀必须以“/”结尾。
  • 示例代码 在ModelArts Notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参考Session鉴权。 1 2 3 from modelarts.session import Session session = Session() session.obs.upload_dir(src_local_dir='/home/ma-user/', dst_obs_dir='obs://bucket-name/dir1/')
  • 参数说明 表1 请求参数说明 参数 是否必选 参数类型 描述 session 是 Object 会话对象。 src_local_dir 是 String 本地需要上传的文件夹路径。 当上传的文件夹下内容为空或者该文件夹下包含多个文件夹且有文件夹下内容有空时,OBS对应路径下不产生该空文件夹。 dst_obs_dir 是 String 上传的目标OBS桶地址,必须以“obs://”作为前缀,上传的目标文件夹后缀必须以“/”结尾。
  • 参数说明 表2 请求参数 参数 是否必选 参数类型 描述 path 是 String 导入的OBS路径或Manifest路径。 导入Manifest时,path必须精确到具体Manifest文件。 导入为目录时,目前仅支持数据集类型为图片分类、物体检测、图像分割、文本分类、声音分类和表格数据集。 字符限制:不允许出现的特殊字符有换行符(\n)、回车符(\r)、制表符(\t)。 annotation_config 否 表4 数据标注格式的说明。该字段为None,则不导入标注信息。如果根据Manifest文件导入,可以传入一个内容为空的dict对象实现导入标注信息。目前支持的标注格式类型如下: 图像分类 物体检测 语音分类 文本分类 with_column_header 否 Boolean 表格数据集必选参数,表格的第一行是否为表头。 True:第一行数据作为表头 False:第一行数据不作为表头,仅为样本数据
  • 示例代码 示例一:物体检测数据集目录导入 from modelarts.session import Session from modelarts.dataset import Dataset session = Session() dataset = Dataset(session, dataset_id) annotation_config = dict() annotation_config['scene'] = "object_detection" annotation_config['format_name'] = "ModelArts PASCAL VOC 1.0" import_resp = dataset.import_data(path="/obs-gaia-test/data/image/image-detection/", annotation_config=annotation_config) 示例二:物体检测数据集Manifest文件导入 annotation_config = dict() # Manifest文件导入任务中,传入annotation_config参数可以导入标注信息 import_resp = dataset.import_data( path="/obs-gaia-test/data/output/work_path/dataset-5932-Qdd1RUZ3wqBQrwrTr3v/annotation/V001/V001.manifest",annotation_config=annotation_config) 示例三:表格数据集目录导入 import_resp = dataset.import_data( path="/obs-gaia-test/data/table/table1/", with_column_header=True)
  • 参数说明 查询模型列表,返回list,list大小等于当前用户所有已经部署的模型个数, list中每个元素都是Model对象,对象属性和查询模型详情相同。查询模型列表返回说明: model_list = [model_instance1, model_instance2, model_instance3 ...],列表中元素model_instance对象即为本章节描述的模型管理,可调用模型接口。 支持按照检索参数查询模型列表,返回满足检索条件的模型list,检索参数如表1所示。 在查询列表时,返回list的同时,会打印模型列表的详细信息,如表2和表3所示。 当前支持最大获取150个模型对象。 表1 查询检索参数说明 参数 是否必选 参数类型 说明 model_name 否 String 模型名称,可支持模糊匹配。 model_version 否 String 模型版本。 model_status 否 String 模型状态,可根据模型的“publishing”、“published”、“failed”三种状态执行查询。 description 否 String 描述信息,可支持模糊匹配。 offset 否 Integer 指定要查询页的索引,默认为“0”。 limit 否 Integer 指定每一页返回的最大条目数,默认为“280”。 sort_by 否 String 指定排序字段,可选“create_at”、“model_version”、“model_size”,默认是可选“create_at”。 order 否 String 排序方式,可选“asc”或“desc”,代表递增排序及递减排序,默认是“desc”。 workspace_id 否 String 工作空间ID,默认为“0”。 表2 get_model_list打印参数说明 参数 参数类型 描述 total_count Integer 不分页的情况下,符合查询条件的总模型数量。 count Integer 模型数量。 models model结构数组 模型元数据信息。
  • 示例代码 在ModelArts Notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权。 场景1:查询当前用户所有模型对象 1 2 3 4 5 6 from modelarts.session import Session from modelarts.model import Model session = Session() model_object_list = Model.get_model_object_list(session) print(model_object_list) 场景2:按照检索条件查询当前用户模型对象 1 2 3 4 5 6 from modelarts.session import Session from modelarts.model import Model session = Session() model_object_list = Model.get_model_object_list(session, model_status="published", model_name="digit", order="desc") print(model_object_list)
  • 使用SDK调测多机分布式训练作业 代码中涉及到的OBS路径,请用户替换为自己的实际OBS路径。 代码是以PyTorch为例编写的,不同的AI框架之间,整体流程是完全相同的,仅需修改7和11中的 framework_type参数值即可,例如:MindSpore框架,此处framework_type=Ascend-Powered-Engine。 Session初始化,与使用SDK调测单机训练作业中的1相同。 准备训练数据,与使用SDK调测单机训练作业中的2相同,唯一的不同在于obs_path参数是必选的。 准备训练脚本。 from modelarts.train_params import TrainingFiles code_dir = os.path.join(base_local_path, "train/") # 这里提前将训练脚本放在了obs中,实际上训练脚本可以是任何来源,只要能够放到Notebook里边就行 session.obs.download_file(os.path.join(base_bucket_path, "train/test-pytorch.py"), code_dir) training_file = TrainingFiles(code_dir=code_dir, boot_file="test-pytorch.py", obs_path=base_bucket_path + 'train/') 参数解释: code_dir:必选参数,训练脚本所在的目录。在本地调试的情况下,必须是notebook目录,不能是OBS目录。 boot_file:必选参数,训练启动文件,在code_dir目录下。 obs_path:在多机分布式调测时必选参数,一个OBS目录,SDK会将notebook目录code_dir打包上传到obs_path中。 准备训练输出,与单机训练作业调试4相同。 查看训练支持的AI框架,与单机训练作业调试5相同。 保存当前Notebook为新镜像,与单机训练作业调试9相同。 Estimator初始化。 from modelarts.estimatorV2 import Estimator parameters = [] parameters.append({"name": "data_url", "value": data_local}) parameters.append({"name": "output_dir", "value": os.path.join(base_local_path, "output/")}) parameters.append({"name": "epoc_num", "value": 2}) # 启动脚本以parser.add_argument('--dist', action='store_true')的形式来接收该布尔类型的参数,如果要传入True,则以本行代码的形式传递; parameters.append({"name": "dist"}) estimator = Estimator(session=session, training_files=training_file, outputs=[output], parameters=parameters, framework_type='PyTorch', train_instance_type='local', train_instance_count=2, script_interpreter="/home/ma-user/anaconda3/envs/PyTorch-1.4/bin/python", log_url=base_bucket_path + 'log/', job_description='This is a image net train job') 参数解释: session:必选参数,1中初始化的参数。 training_files:必选参数,3中初始化的训练文件。 outputs:可选参数,这里传入的是一个list,每个元素都是步骤4中初始化的训练输出。 parameters:可选参数,一个list,每个元素都是一个字典,包含"name"和"value"两个字段,以"–name=value"的形式传递给训练启动文件。value支持字符串,整数,布尔等类型。对于布尔类型,建议用户在训练脚本中使用action='store_true'的形式来解析。 framework_type:必选参数,训练作业使用的AI框架类型,可参考步骤5的返回结果。 train_instance_type:必选参数,训练实例类型,这里指定’local’即为本地训练。 train_instance_count:必选参数,训练使用的worker个数,分布式调测时为2,训练开始时SDK还会再创建一个Notebook,与当前的Notebook组成一个2节点的分布式调试环境。 script_interpreter:可选参数,指定使用哪个python环境来执行训练任务,如果未指定,会默认使用当前的kernel。 log_url:可选参数,一个OBS地址,本地训练过程中,SDK会自动将训练的日志上传到该位置;但是如果训练任务运行在Ascend上,则是必选参数。 job_description:可选参数,训练任务的描述。 开始训练。 estimator.fit(inputs=[input_data], job_name="cifar10-dis") 参数解释: inputs:可选参数,一个list,每个元素都是步骤2中生成的实例; job_name:可选参数,训练任务名,便于区分和记忆。 本地分布式训练任务开始后,SDK会依次帮助用户完成以下流程: 将训练脚本打包成zip文件,上传到3中指定的obs_path中。 如果训练数据保存在Notebook中,则将其打包成zip文件并上传到指定的obs_path中。 创建一个附属Notebook,与当前使用的Notebook组成分布式训练的两个worker。 初始化训练作业,将数据下载到local_path中。 执行训练任务,用户的代码需要将训练输出保存在4指定的local_path中。 将训练任务得到的输出上传到4指定的obs_path中,日志上传到7指定的log_url中。 多次调试,与单机调测时8作用相同。 查询训练支持的工作节点类型,与单机调测时9相同。 提交远程训练作业。 from modelarts.estimatorV2 import Estimator parameters = [] parameters.append({"name": "data_url", "value": data_local}) parameters.append({"name": "output_dir", "value": os.path.join(base_local_path, "output/")}) parameters.append({"name": "epoc_num", "value": 2}) # 启动脚本以parser.add_argument('--dist', action='store_true')的形式来接收该布尔类型的参数,如果要传入True,则以本行代码的形式传递; parameters.append({"name": "dist"}) estimator = Estimator(session=session, training_files=training_file, outputs=[output], parameters=parameters, framework_type='PyTorch', train_instance_type='modelarts.p3.large.public.distributed', train_instance_count=2, script_interpreter="/home/ma-user/anaconda3/envs/PyTorch-1.4/bin/python", log_url=base_bucket_path + 'log/', job_description='This is a image net train job') estimator.fit(inputs=[input_data], job_name="cifar10-dis-1") Estimator初始化时与本地训练的区别在于参数train_instance_type,需要从10得到的结果中选择一个;参数train_instance_count的值取决于第10步中的max_num。 训练任务提交后,SDK会依次帮助用户完成以下流程: 将训练脚本打包成zip文件,上传到3中指定的obs_path中; 如果训练数据保存在Notebook中,则将其打包成zip文件并上传到指定的obs_path中; 将训练作业提交到ModelArts训练服务中,训练作业会使用当前Notebook的镜像来执行训练作业; 训练任务得到的输出上传到4指定的obs_path中,日志上传到log_url指定的位置中。 在这一步中需要注意的一个问题: 如果用户在自己的训练脚本中要创建新的目录或文件,请在以下几种目录中创建: (1)/home/ma-user/work; (2)/cache; (3)inputs或者outputs中指定的local_path,如在2中初始化InputData时,填写了local_path="/home/ma-user/work/xx/yy/",则在该目录下也可以创建新目录或文件; 父主题: 训练作业调测
  • 示例代码 在ModelArts Notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参考Session鉴权。 1 2 3 from modelarts.session import Session session = Session() session.obs.download_file(src_obs_file="obs://bucket-name/dir1/file1.txt", dst_local_dir="/home/ma-user/")
  • 示例代码 示例一:根据数据类型创建图像数据集 from modelarts.session import Session from modelarts.dataset import Dataset session = Session() dataset_name = "dataset-image" # 数据集名称 data_type = "IMAGE" # 数据集类型,图像类型数据集 data_sources = dict() # 数据集数据来源 data_sources["type"] = 0 # 数据来源类型,0表示OBS data_sources["path"] = "/obs-gaia-test/data/image/image-classification/" # 数据在OBS中的路径 work_path = dict() # 数据集输出位置,用于存放输出的标注信息等文件 work_path['type'] = 0 # 数据集工作目录的类型,0表示OBS work_path['path'] = "/obs-gaia-test/data/output/work_path/" # 数据集工作目录在OBS中的路径 create_dataset_resp = Dataset.create_dataset(session, dataset_name=dataset_name, data_type=data_type, data_sources=data_sources, work_path=work_path) 示例二:根据数据类型创建图像数据集(导入标注信息) from modelarts.session import Session from modelarts.dataset import Dataset session = Session() dataset_name = "dataset-image-with-annotations" data_type = "IMAGE" data_sources = dict() data_sources["type"] = 0 data_sources["path"] = "/obs-gaia-test/data/image/image-classification/" annotation_config = dict() # 源数据的标注格式 annotation_config['scene'] = "image_classification" # 数据标注场景为图像分类标注 annotation_config['format_name'] = "ModelArts image classification 1.0" # 标注格式为ModelArts image classification 1.0 data_sources['annotation_config'] = annotation_config work_path = dict() work_path['type'] = 0 work_path['path'] = "/obs-gaia-test/data/output/work_path/" create_dataset_resp = Dataset.create_dataset(session, dataset_name=dataset_name, data_type=data_type, data_sources=data_sources, work_path=work_path) 示例三:根据数据类型创建表格数据集 from modelarts.session import Session from modelarts.dataset import Dataset session = Session() dataset_name = "dataset-table" data_type = "TABLE" data_sources = dict() data_sources["type"] = 0 data_sources["path"] = "/obs-gaia-test/data/table/table0/" data_sources['with_column_header'] = True work_path = dict() work_path['type'] = 0 work_path['path'] = "/obs-gaia-test/data/output/work_path/" # 表格类型的数据集需要指定表格数据的schema信息 schema0 = dict() schema0['schema_id'] = 0 schema0['name'] = "name" schema0['type'] = "STRING" schema1 = dict() schema1['schema_id'] = 1 schema1['name'] = "age" schema1['type'] = "STRING" schema2 = dict() schema2['schema_id'] = 2 schema2['name'] = "label" schema2['type'] = "STRING" schemas = [] schemas.append(schema0) schemas.append(schema1) schemas.append(schema2) create_dataset_resp = Dataset.create_dataset(session, dataset_name=dataset_name, data_type=data_type, data_sources=data_sources, work_path=work_path, schema=schemas) 示例四:根据标注类型创建图像分类数据集 from modelarts.session import Session from modelarts.dataset import Dataset session = Session() dataset_name = "dataset-image-classification" dataset_type = 0 # 数据集的标注类型,0表示图像分类标注类型 data_sources = dict() data_sources["path"] = "/obs-gaia-test/data/image/image-classification/" data_sources["type"] = "0" work_path = dict() work_path['type'] = 0 work_path['path'] = "/obs-gaia-test/data/output/work_path/" create_dataset_resp = Dataset.create_dataset(session, dataset_name=dataset_name, dataset_type=dataset_type, data_sources=data_sources, work_path=work_path) 示例五:根据标注类型创建文本三元组数据集 dataset_name = "dataset-text-triplet" dataset_type = 102 # 数据集标注类型,102表示文本三元组标注类型 data_sources = dict() data_sources['type'] = 0 data_sources['path'] = "/obs-gaia-test/data/text/text-classification/" work_path = dict() work_path['type'] = 0 work_path['path'] = "/obs-gaia-test/data/output/work_path/" # 创建文本三元组标注类型的数据集,需要传入标签参数 label_entity1 = dict() # 标签对象 label_entity1['name'] = "疾病" # 标签名称 label_entity1['type'] = 101 # 标签类型,101表示实体类型标签 label_entity2 = dict() label_entity2['name'] = "疾病别称" label_entity2['type'] = 101 label_relation1 = dict() label_relation1['name'] = "又称为" label_relation1['type'] = 102 # 标签类型,102表示关系类型标签 property = dict() # 关系类型标签需要在标签属性中指定起始实体标签和终止实体标签 property['@modelarts:from_type'] = "疾病" # 起始实体标签 property['@modelarts:to_type'] = "疾病别称" # 终止实体标签 label_relation1['property'] = property labels = [] labels.append(label_entity1) labels.append(label_entity2) labels.append(label_relation1) create_dataset_resp = Dataset.create_dataset(session, dataset_name=dataset_name, dataset_type=dataset_type, data_sources=data_sources, work_path=work_path, labels=labels) 示例六:根据标注类型创建表格数据集 dataset_name = "dataset-table" dataset_type = 400 # 数据集标注类型,400表示表格数据集 data_sources = dict() data_sources['type'] = 0 data_sources['path'] = "/obs-gaia-test/data/table/table0/" data_sources['with_column_header'] = True # 用来指明表格数据中是否包含表头 work_path = dict() work_path['type'] = 0 work_path['path'] = "/obs-gaia-test/data/output/work_path/" # 表格数据集需要传入表格数据的表头参数 schema0 = dict() # 表格的表头 schema0['schema_id'] = 0 # 第一列表头 schema0['name'] = "name" # 表头名称,该列表头为name schema0['type'] = "STRING" # 表头数据类型,表示字符串 schema1 = dict() schema1['schema_id'] = 1 schema1['name'] = "age" schema1['type'] = "STRING" schema2 = dict() schema2['schema_id'] = 2 schema2['name'] = "label" schema2['type'] = "STRING" schemas = [] schemas.append(schema0) schemas.append(schema1) schemas.append(schema2) create_dataset_resp = Dataset.create_dataset(session, dataset_name=dataset_name, dataset_type=dataset_type, data_sources=data_sources, work_path=work_path, schema=schemas)
  • 参数说明 表1 Estimator请求参数说明 参数 是否必选 参数类型 描述 modelarts_session 是 Object 会话对象,初始化方法见Session鉴权。 train_instance_count 是 Long 训练作业worker的个数。 code_dir 否 String 训练作业的代码目录,如“/bucket/src/”。当填入model_name时不需要填写。 boot_file 否 String 训练作业的代码启动文件,需要在代码目录下,如“/bucket/src/boot.py”。当填入model_name时不需要填写。 model_name 否 Long 训练作业的内置算法模型名称。填入model_name后app_url与boot_file_url不需填写,framework_type和framework_version也不需要填写。“model_name”请从查询预置算法接口中获取。 output_path 是 String 训练作业的输出位置。 hyperparameters 否 JSON Array 训练作业的运行参数,为label-value格式,其中lable和value的值均为String类型;当为自定义镜像训练作业的时候,此参数为容器环境变量。 log_url 否 String 训练作业的日志OBS输出路径URL,默认为空。如:“/usr/log/”。 train_instance_type 是 Long 训练作业选择的资源规格。若选择在训练平台训练,请从查询资源规格列表接口获取。 framework_type 否 String 训练作业选择的引擎规格。请从查询引擎规格列表接口获取引擎规格。当填入model_name时不需要填写。 framework_version 否 String 训练作业选择的引擎版本。请从查询引擎规格列表接口获取引擎版本。当填入model_name时不需要填写。 user_image_url 否 String 自定义镜像训练作业的自定义镜像的SWR-URL。如:“100.125.5.235:20202/jobmng/custom-cpu-base:1.0”。 user_command 否 String 自定义镜像训练作业的自定义镜像的容器的启动命令。形式为:“bash /home/work/run_train.sh python /home/work/user-job-dir/app/train.py {python_file_parameter}” 。 表2 create_job_version请求参数说明 参数 是否必选 参数类型 描述 job_id 是 String 训练作业的ID。job_id可通过创建训练作业生成的训练作业对象查询,如“job_instance.job_id”。或可通过查询训练作业列表的响应获取。 pre_version_id 是 Long 训练作业前一版本的ID。pre_version_id可通过创建训练作业生成的训练作业对象查询,如“job_instance.version_id”。或通过查询训练作业列表的响应获取。 inputs 是 String 训练作业的数据存储位置。inputs和dataset_id、dataset_version_id、data_source不可同时出现,但必须有其一。本地训练只支持该参数。 dataset_id 否 String 训练作业的数据集ID。应与dataset_version_id同时出现,但不可与inputs同时出现。 dataset_version_id 否 String 训练作业的数据集版本ID。应与dataset_id同时出现,但不可与inputs同时出现。 wait 否 Boolean 是否等待创建训练作业版本结束,默认为“False”。 job_desc 否 String 训练作业版本的描述。 表3 create_job_version成功响应说明 参数 类型 描述 TrainingJob Object 训练对象。该对象包含job_id、version_id等属性,及对训练作业的查询、更新、删除等操作,如可通过job_version_instance.job_id获取训练作业ID。
  • 示例代码 在ModelArts notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权。 示例一:使用OBS存储位置创建训练作业版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, framework_type='PyTorch', # AI引擎名称 framework_version='PyTorch-1.0.0-python3.6', # AI引擎版本 code_dir='/bucket/src/', # 训练脚本目录 boot_file='/bucket/src/pytorch_sentiment.py', # 训练启动脚本目录 log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.gpu.p100', # 训练环境规格 train_instance_count=1) job_version_instance = estimator.create_job_version(job_id='182626', pre_version_id=278813, inputs='/bucket/data/train/', wait=False, job_desc='create a job version') 示例二:使用数据集创建训练作业版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, framework_type='PyTorch', # AI引擎名称 framework_version='PyTorch-1.0.0-python3.6', # AI引擎版本 code_dir='/bucket/src/', # 训练脚本目录 boot_file='/bucket/src/pytorch_sentiment.py', # 训练启动脚本目录 log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.gpu.p100', # 训练环境规格 train_instance_count=1, # 训练节点个数 job_description='pytorch-sentiment with ModelArts SDK') # 训练作业描述 job_version_instance = estimator.create_job_version(job_id='182626', pre_version_id=278813, inputs='/bucket/data/train/', wait=False, job_desc='create a job version') 示例三:创建自定义镜像的训练作业版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.gpu.p100', # 训练环境规格 train_instance_count=1, # 训练节点个数 user_command='bash -x /home/work/run_train.sh python /home/work/user-job-dir/app/mnist/mnist_softmax.py --data_url /home/work/user-job-dir/app/mnist_data', # 自定义镜像启动命令 user_image_url='100.125.5.235:20202/jobmng/cpu-base:1.0', # 自定义镜像下载地址 job_description='pytorch-sentiment with ModelArts SDK') # 训练作业描述 job_version_instance = estimator.create_job_version(job_id='182626', pre_version_id=278813, inputs='/bucket/data/train/', wait=False, job_desc='create a job version') 示例四:使用内置模型创建训练作业版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, model_name='Faster_RCNN_ResNet_v1_50', # 内置模型名称 log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.gpu.p100', # 训练环境规格 train_instance_count=1, # 训练节点个数 job_description='pytorch-sentiment with ModelArts SDK') # 训练作业描述 job_version_instance = estimator.create_job_version(job_id='182626', pre_version_id=278813, inputs='/bucket/data/train/', wait=False, job_desc='create a job version')
  • 使用SDK调测单机训练作业 代码中涉及到的OBS路径,请用户替换为自己的实际OBS路径。 代码是以PyTorch为例编写的,不同的AI框架之间,整体流程是完全相同的,仅需修改6和10中的 framework_type参数值即可,例如:MindSpore框架,此处framework_type=Ascend-Powered-Engine。 Session初始化。 代码如下:这里只列出最常用的一种方式,更多方式请参考《Session鉴权章节》 from modelarts.session import Session session = Session() 准备训练数据,这里支持三种形式,用户可根据自己的情况选择一种。 import os from modelarts.train_params import InputData base_bucket_path = "obs://modelarts-xxx-a0de02a6/dis-train/cifar10/" base_local_path = "/home/ma-user/work/cifar10/" # 形式1,数据在OBS上,且是一个压缩文件 obs_path = os.path.join(base_bucket_path, "dataset-zip/dataset.zip") data_local = os.path.join(base_local_path, "dataset/") input_data = InputData(obs_path=obs_path, local_path=data_local, is_local_source=False) # 形式2,数据在OBS上,且是一个目录 #obs_path = os.path.join(base_bucket_path, "dataset/") #data_local = os.path.join(base_local_path, "dataset/") #input_data = InputData(obs_path=obs_path, local_path=data_local, is_local_source=False) # 形式3,数据在Notebook中,且是一个目录,一般是使用SFS挂载磁盘的场景 #obs_path = os.path.join(base_bucket_path, "dataset-local/") #data_local = os.path.join(base_local_path, "dataset/") #input_data = InputData(obs_path=obs_path, local_path=data_local, is_local_source=True) 参数解释: is_local_source:可选参数,默认为False,指定训练数据的保存位置。 False:训练数据保存在参数obs_path指定的位置中; True:训练数据保存在notebook中,由local_path指定。 obs_path:obs地址。根据is_local_source值的变化,有不同的含义。 is_local_source=False,此时是必选参数,代表训练数据位置,支持文件夹和压缩文件。 is_local_source=True,此时是可选参数。如果用户填写了该参数,则开始训练时会将Notebook中的训练数据压缩并上传到该位置,不可重复上传。如果第一次上传后,建议将is_local_source修改为False,obs_path指向刚才上传的压缩数据文件位置;如果用户没有填写,则不会进行压缩上传。 local_path:必选参数,Notebook中的路径。用户的训练脚本需要从该目录中读取数据,完成训练任务。根据is_local_source值的变化,有不同的含义。 is_local_source=True,此时代表训练数据位置,仅支持文件夹。 is_local_source=False,训练过程中SDK会帮助用户将数据下载到该位置,如果训练数据是压缩文件,下载完成后会进行解压缩。 准备训练脚本。 from modelarts.train_params import TrainingFiles code_dir = os.path.join(base_local_path, "train/") # 这里提前将训练脚本放在了obs中,实际上训练脚本可以是任何来源,只要能够放到Notebook里边就行 session.obs.download_file(os.path.join(base_bucket_path, "train/test-pytorch.py"), code_dir) training_file = TrainingFiles(code_dir=code_dir, boot_file="test-pytorch.py", obs_path=base_bucket_path + 'train/') 参数解释: code_dir:必选参数,训练脚本所在的目录。在训练任务调测的情况下,必须是notebook中的目录,不能是OBS目录。 boot_file:必选参数,训练启动文件路径,路径格式为基于code_dir目录的相对路径,如实例代码中boot_file的完整路径为/home/ma-user/work/cifar10/train/test-pytorch.py,这里就只需要填写test-pytorch.py。 obs_path:可选参数,一个OBS目录。仅在本地单机调试时不需要该参数,提交远程训练时必选,会将训练脚本压缩并上传到该路径。 准备训练输出,如果用户不需要将训练输出上传到OBS,可以省略这一步。 from modelarts.train_params import OutputData output = OutputData(local_path=os.path.join(base_local_path, "output/"), obs_path=os.path.join(base_bucket_path, 'output/')) local_path:必选参数,一个notebook中的路径,训练脚本需要将输出的模型或其他数据保存在该目录下。 obs_path:必选参数,一个OBS目录。SDK会将local_path中的模型文件自动上传到这里。 查看训练支持的AI框架。 from modelarts.estimatorV2 import Estimator Estimator.get_framework_list(session) 参数session即是第一步初始化的数据。如果用户知道要使用的AI框架,可以略过这一步。 Estimator初始化。 from modelarts.estimatorV2 import Estimator parameters = [] parameters.append({"name": "data_url", "value": data_local}) parameters.append({"name": "output_dir", "value": os.path.join(base_local_path, "output/")}) parameters.append({"name": "epoc_num", "value": 2}) estimator = Estimator(session=session, training_files=training_file, outputs=[output], parameters=parameters, framework_type='PyTorch', train_instance_type='local', train_instance_count=1, script_interpreter="/home/ma-user/anaconda3/envs/PyTorch-1.4/bin/python", log_url=base_bucket_path + 'log/', job_description='This is a image net train job') 参数解释: session:必选参数,1中初始化的参数。 training_files:必选参数,3中初始化的训练文件。 outputs:可选参数,这里传入的是一个list,每个元素都是4中初始化的训练输出。 parameters:可选参数,一个list,每个元素都是一个字典,包含"name"和"value"两个字段,以"--name=value"的形式传递给训练启动文件。value支持字符串,整数,布尔等类型。对于布尔类型,建议用户在训练脚本中使用action='store_true'的形式来解析。 framework_type:必选参数,训练作业使用的AI框架类型,可参考步骤5查询的返回结果。 train_instance_type:必选参数,训练实例类型,这里指定'local'即为在notebook中进行训练。 train_instance_count:必选参数,训练使用的worker个数,单机训练时为1,训练作业只在当前使用的notebook中运行。 script_interpreter:可选参数,指定使用哪个python环境来执行训练任务,如果未指定,会默认使用当前的kernel。 log_url:可选参数,一个OBS地址,训练过程中,SDK会自动将训练的日志上传到该位置。但是如果训练任务运行在Ascend上,则是必选参数。 job_description:可选参数,训练任务的描述。 开始训练。 estimator.fit(inputs=[input_data], job_name="cifar10-dis") 参数解释: inputs:可选参数,一个list,每个元素都是2生成的实例。 job_name:可选参数,训练任务名,便于区分和记忆。 本地单机调试训练任务开始后,SDK会依次帮助用户完成以下流程: 初始化训练作业,如果2指定的训练数据在OBS上,这里会将数据下载到local_path中。 执行训练任务,用户的训练代码需要将训练输出保存在4中指定的local_path中。 将训练任务得到的输出上传到4指定的obs_path中,日志上传到第六步指定的log_url中。 同时,可以在任务名后增加时间后缀,区分不同的任务名称。 from datetime import datetime, timedelta import time base_name = "cifar10-dis" job_name = base_name + '-' + (datetime.now() + timedelta(hours=8)).strftime('%Y%m%d-%H%M%S') estimator.fit(inputs=[input_data], job_name=job_name) 多次调试。 上一步执行过程中,训练脚本的日志会实时打印到控制台,如果用户的代码或者参数有误的话,可以很方便的看到。在Notebook中经过多次调试,得到想要的结果后,可以进行下一步。 查询训练支持的计算节点类型和最大个数。 from modelarts.estimatorV2 import Estimator Estimator.get_spec_list(session=session) 参数session即是1初始化的数据。返回的是一个字典,其中flavors值是一个列表,描述了训练服务支持的所有规格的信息。每个元素中flavor_id是可直接用于远程训练任务的计算规格,max_num是该规格的最大节点数。如果用户知道要使用的计算规格,可以略过这一步。 提交远程训练作业。 from modelarts.estimatorV2 import Estimator parameters = [] parameters.append({"name": "data_url", "value": data_local}) parameters.append({"name": "output_dir", "value": os.path.join(base_local_path, "output/")}) parameters.append({"name": "epoch_num", "value": 2}) estimator = Estimator(session=session, training_files=training_file, outputs=[output], parameters=parameters, framework_type='PyTorch', train_instance_type='modelarts.vm.cpu.8u', train_instance_count=1, script_interpreter="/home/ma-user/anaconda3/envs/PyTorch-1.4/bin/python", log_url=base_bucket_path + 'log/', job_description='This is a image net train job') estimator.fit(inputs=[input_data], job_name="cifar10-dis") 在本地调测完成的基础上,只需要Estimator初始化时将参数train_instance_type修改为训练服务支持的规格即可(即第10步查询出来的flavor_id的值)。执行fit函数后,即可提交远程训练任务。 训练任务提交后,SDK会依次帮助用户完成以下流程: 将训练脚本打包成zip文件,上传到3中指定的obs_path中。 当训练数据保存在Notebook中,则将其打包成zip文件并上传到指定的obs_path中。 向ModelArts训练服务提交自定义镜像训练作业,使用的镜像为当前Notebook的镜像,这样保证了远程训练作业和在Notebook中的训练作业使用的运行环境一致。 训练任务得到的输出上传到4指定的obs_path中,日志上传到这一步log_url指定的位置中。 在这一步中需要注意的一个问题: 如果用户在自己的训练脚本中要创建新的目录或文件,请在以下几种目录中创建: /home/ma-user/work; /cache; inputs或者outputs中指定的local_path,如在步骤2中初始化InputData时,填写了local_path="/home/ma-user/work/xx/yy/",则在该目录下也可以创建新目录或文件。 父主题: 训练作业调测
  • 示例代码 在ModelArts notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权。 方式1:根据部署在线服务生成的服务对象进行服务详情查询 1 2 3 4 5 6 7 from modelarts.session import Session from modelarts.model import Predictor session = Session() predictor_instance = Predictor(session, service_id="your_service_id") predictor_info = predictor_instance.get_service_info() print(predictor_info) 方式2:根据查询服务对象列表返回的服务对象进行服务详情查询 1 2 3 4 5 6 7 8 from modelarts.session import Session from modelarts.model import Predictor session = Session() predictor_object_list = Predictor.get_service_object_list(session) predictor_instance = predictor_object_list[0] predictor_info = predictor_instance.get_service_info() print(predictor_info)
  • 参数说明 表1 Estimator请求参数说明 参数 是否必选 参数类型 描述 modelarts_session 是 Object 会话对象,初始化方法请参见Session鉴权。 train_instance_count 是 Int 训练作业计算节点个数。 code_dir 否 String 训练作业的代码目录,如“/bucket/src/”。当填入model_name时不需要填写。 boot_file 否 String 训练作业的代码启动文件,需要在代码目录下,如“/bucket/src/boot.py”。当填入model_name时不需要填写。 model_name 否 String 训练作业的内置算法模型名称。填入model_name后app_url与boot_file_url不需填写,framework_type和framework_version也不需要填写。“model_name”请从查询预置算法 接口中获取。 output_path 是 String 训练作业的输出位置。 hyperparameters 否 JSON Array 训练作业的运行参数,为label-value格式,其中lable和value的值均为String类型;当为自定义镜像训练作业的时候,此参数为容器环境变量。 log_url 否 String 训练作业的日志OBS输出路径URL,默认为空。如:“/usr/log/”。 train_instance_type 是 String 训练作业选择的资源规格。若选择在训练平台训练,请从查询资源规格列表接口获取。 framework_type 否 String 训练作业选择的引擎规格。请从查询引擎规格列表接口获取引擎规格。当填入model_name时不需要填写。 framework_version 否 String 训练作业选择的引擎版本。请从查询引擎规格列表接口获取引擎版本。当填入model_name时不需要填写。 job_description 否 String 训练作业的描述。 user_image_url 否 String 自定义镜像训练作业的自定义镜像的SWR-URL。如:“100.125.5.235:20202/jobmng/custom-cpu-base:1.0”。 user_command 否 String 自定义镜像训练作业的自定义镜像的容器的启动命令。形式为:“bash /home/work/run_train.sh python /home/work/user-job-dir/app/train.py {python_file_parameter}” 。 pool_id 否 String 训练作业选择的资源池ID,可在ModelArts管理控制台,单击左侧“专属资源池”,在专属资源池列表中查看资源池ID。 表2 fit请求参数说明 参数 是否必选 参数类型 描述 inputs 是 String 训练作业的数据存储位置。 inputs和(dataset_id、dataset_version_id)、data_source三者不可同时出现,但必须有其一。 本地训练只支持该参数。 dataset_id 否 String 训练作业的数据集ID。 应与dataset_version_id同时出现,但不可与inputs同时出现。 dataset_version_id 否 String 训练作业的数据集版本ID。 应与dataset_id同时出现,但不可与inputs同时出现。 wait 否 Boolean 是否等待训练作业结束,默认为False。 job_name 否 String 训练作业的名称,支持[a-zA-Z0-9_-]{1,64}。若不填,则会动态生成一个job_name。 表3 训练平台训练的成功响应说明 参数 类型 描述 TrainingJob Object 训练对象。该对象包含job_id、version_id等属性,对训练作业的查询、更新、删除等操作,如可通过job_instance.job_id获取训练作业ID。
  • 示例代码 在ModelArts notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权。 示例一:使用OBS存储位置创建训练作业 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, framework_type='PyTorch', # AI引擎名称 framework_version='PyTorch-1.0.0-python3.6', # AI引擎版本 code_dir='/bucket/src/', # 训练脚本目录 boot_file='/bucket/src/pytorch_sentiment.py', # 训练启动脚本目录 log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.cpu.2u', # 训练环境规格 train_instance_count=1, # 训练节点个数 job_description='pytorch-sentiment with ModelArts SDK') # 训练作业描述 job_instance = estimator.fit(inputs='/bucket/data/train/', wait=False, job_name='my_training_job') 示例二:使用数据集创建训练作业 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, framework_type='PyTorch', # AI引擎名称 framework_version='PyTorch-1.0.0-python3.6', # AI引擎版本 code_dir='/bucket/src/', # 训练脚本目录 boot_file='/bucket/src/pytorch_sentiment.py', # 训练启动脚本目录 log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.cpu.2u', # 训练环境规格 train_instance_count=1, # 训练节点个数 job_description='pytorch-sentiment with ModelArts SDK') # 训练作业描述 job_instance = estimator.fit(dataset_id='4AZNvFkN7KYr5EdhFkH', dataset_version_id='UOF9BIeSGArwVt0oI6T', wait=False, job_name='my_training_job') 示例三:创建自定义镜像的训练作业 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from modelarts.session import Session from modelarts.estimator import Estimator session = Session() estimator = Estimator( modelarts_session=session, log_url='/bucket/log/', # 训练日志目录 hyperparameters=[ {"label":"classes", "value": "10"}, {"label":"lr", "value": "0.001"} ], output_path='/bucket/output/', # 训练输出目录 train_instance_type='modelarts.vm.cpu.2u', # 训练环境规格 train_instance_count=1, # 训练节点个数 user_command='bash -x /home/work/run_train.sh python /home/work/user-job-dir/app/mnist/mnist_softmax.py --data_url /home/work/user-job-dir/app/mnist_data', # 自定义镜像启动命令 user_image_url='100.125.5.235:20202/jobmng/cpu-base:1.0', # 自定义镜像下载地址 job_description='pytorch-sentiment with ModelArts SDK') # 训练作业描述 job_instance = estimator.fit(inputs='/bucket/data/train/', wait=False, job_name='my_training_job')
  • 参数说明 表1 Environment参数说明 参数 是否必选 类型 说明 name 是 String 环境名称。 conda 否 CondaDependencies conda环境,具体请参见表2。 表2 CondaDependencies参数说明 参数 是否必选 类型 说明 channels 否 List python包的下载源。 pip_packages 否 List conda虚拟环境需要使用的python包,如tensorflow,pillow等。 conda_packages 否 List conda虚拟环境需要使用的conda包,如指定python版本。 表3 Estimator请求参数说明 参数 是否必选 参数类型 描述 modelarts_session 是 Object 会话对象,初始化方法请参见Session鉴权。 train_instance_count 是 Int 训练作业计算节点个数。 code_dir 否 String 训练作业的代码目录,如“/bucket/src/”。当填入model_name时不需要填写。 boot_file 否 String 训练作业的代码启动文件,需要在代码目录下,如“/bucket/src/boot.py”。当填入model_name时不需要填写。 model_name 否 String 训练作业的内置算法模型名称。填入model_name后app_url与boot_file_url不需填写,framework_type和framework_version也不需要填写。“model_name”请从查询预置算法 接口中获取。 output_path 是 String 训练作业的输出位置。 hyperparameters 否 JSON Array 训练作业的运行参数,为label-value格式,其中lable和value的值均为String类型;当为自定义镜像训练作业的时候,此参数为容器环境变量。 log_url 否 String 训练作业的日志OBS输出路径URL,默认为空。如:“/usr/log/”。 train_instance_type 是 String 训练作业选择的资源规格。若选择在训练平台训练,请从查询资源规格列表接口获取。 framework_type 否 String 训练作业选择的引擎规格。请从查询引擎规格列表接口获取引擎规格。当填入model_name时不需要填写。 framework_version 否 String 训练作业选择的引擎版本。请从查询引擎规格列表接口获取引擎版本。当填入model_name时不需要填写。 job_description 否 String 训练作业的描述。 user_image_url 否 String 自定义镜像训练作业的自定义镜像的SWR-URL。如:“100.125.5.235:20202/jobmng/custom-cpu-base:1.0”。 user_command 否 String 自定义镜像训练作业的自定义镜像的容器的启动命令。形式为:“bash /home/work/run_train.sh python /home/work/user-job-dir/app/train.py {python_file_parameter}” 。 pool_id 否 String 训练作业选择的资源池ID,可在ModelArts管理控制台,单击左侧“专属资源池”,在专属资源池列表中查看资源池ID。 表4 fit请求参数说明 参数 是否必选 参数类型 描述 inputs 是 String 训练作业的数据存储位置。 inputs和(dataset_id、dataset_version_id)、data_source三者不可同时出现,但必须有其一。 本地训练只支持该参数。 dataset_id 否 String 训练作业的数据集ID。 应与dataset_version_id同时出现,但不可与inputs同时出现。 dataset_version_id 否 String 训练作业的数据集版本ID。 应与dataset_id同时出现,但不可与inputs同时出现。 wait 否 Boolean 是否等待训练作业结束,默认为False。 job_name 否 String 训练作业的名称,支持[a-zA-Z0-9_-]{1,64}。若不填,则会动态生成一个job_name。
  • 示例代码 在ModelArts notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权。 步骤1:创建本地训练作业。当“train_instance_type”为“local”时,表示创建的是本地训练作业,可以用来调试代码和参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from modelarts.session import Session from modelarts.estimator import Estimator from modelarts.environment import Environment from modelarts.environment.conda_env import CondaDependencies session = Session() env = Environment("tensorflow_mlp_mnist") cd = CondaDependencies.create(pip_packages=["tensorflow==1.13.1", "requests"], conda_packages=["python=3.6.2"]) env.conda = cd src_local_path = "/home/ma-user/work/tensorflow_mlp_mnist_local_mode/train/" train_file = "tensorflow_mlp_mnist.py" estimator = Estimator(modelarts_session=session, code_dir=src_local_path, # 本地训练脚本目录 boot_file=train_file, # 本地训练启动脚本目录 train_instance_type='local', # 指定为本地训练 train_instance_count=1, # 训练节点个数 environment=env) # 训练脚本运行的环境 job_instance = estimator.fit(wait=False, job_name='my_training_job') 步骤2:本地训练作业完成后,可以创建为在线训练作业。当“train_instance_type”为训练环境规格时,表示创建的是在线训练。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from modelarts.session import Session from modelarts.estimator import Estimator from modelarts.environment import Environment from modelarts.environment.conda_env import CondaDependencies session = Session() env = Environment("tensorflow_mlp_mnist") cd = CondaDependencies.create(pip_packages=["tensorflow==1.13.1", "requests"], conda_packages=["python=3.6.2"]) env.conda = cd src_local_path = "/home/ma-user/work/tensorflow_mlp_mnist_local_mode/train/" train_file = "tensorflow_mlp_mnist.py" estimator = Estimator(modelarts_session=session, code_dir=src_local_path, # 训练脚本目录 boot_file=train_file, # 训练启动脚本目录 train_instance_type='modelarts.vm.cpu.2u', # 在线训练 train_instance_count=1, # 训练节点个数 environment=env) # 训练脚本运行的环境 job_instance = estimator.fit(wait=False, job_name='my_training_job')
  • 示例代码 更新数据集名称 from modelarts.session import Session from modelarts.dataset import Dataset session = Session() dataset = Dataset(session, dataset_id) dataset.update_dataset(dataset_name = "new-dataset-name")
  • 示例代码 在ModelArts Notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权。 1 2 3 from modelarts.session import Session session = Session() session.obs.upload_file(src_local_file='/home/ma-user/file1.txt', dst_obs_dir='obs://bucket-name/dir1/')
  • 敏感操作 关闭验证码验证功能后,在伙伴中心进行敏感操作时,将通过手机短信或者邮箱再次确认操作者的身份,进一步提高账号安全性,有效保护您安全操作相关功能。 具体影响的敏感操作如下表所示: 伙伴类型 敏感操作 政府类伙伴 发放/回收现金券 发放/回收代金券 解决方案提供商 余额支付(为客户代支付订单) 为客户调账 发放/回收代金券 为云商店商品订单调价(仅严选用户) 伙伴发起解除关联或切换关联类型事件 处理客户发起的解除关联事件 经销商子客户 处理伙伴发起的解除关联或切换关联类型事件 同意或取消伙伴发起的代客授权事件 华为云总经销商(一级经销商) 余额支付(为客户代支付订单) 为客户调账 发放/回收代金券 发放/回收代金券额度 为云商店商品订单调价(仅严选用户) 伙伴发起解除关联或切换关联类型事件 处理客户发起的解除关联事件 云经销商 余额支付(为客户代支付订单) 为客户调账 发放/回收代金券 伙伴发起解除关联或切换关联类型事件 处理客户发起的解除关联事件 父主题: 附录
共100000条