华为云用户手册
-
URI POST /v1/{project_id}/eihealth-projects/{eihealth_project_id}/workflows/{workflow_id}/publish 表1 路径参数 参数 是否必选 参数类型 描述 eihealth_project_id 是 String 平台项目ID,您可以在平台单击所需的项目名称,进入项目设置页面查看。 最小长度:1 最大长度:128 project_id 是 String 华为云项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 workflow_id 是 String 流程id 最小长度:1 最大长度:128
-
请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限, 获取Token 接口响应消息头中X-Subject-Token的值即为Token。 表3 请求Body参数 参数 是否必选 参数类型 描述 name 是 String 资产名称 最小长度:1 最大长度:56 version 是 String 资产版本 最小长度:1 最大长度:24 picture 否 String 封面图片base64编码 最小长度:0 最大长度:50000 title 否 String 展示名 最小长度:0 最大长度:128 summary 否 String 短描述 最小长度:0 最大长度:128 description 否 String 长描述 最小长度:0 最大长度:65535 labels 否 Array of strings 标签列表 最小长度:1 最大长度:32 数组长度:0 - 5
-
请求示例 发布流程,流程的名称为demo-workflow,版本为1.0.0。 https://eihealth.cn-north-4.myhuaweicloud.com/v1/{project_id}/eihealth-projects/{eihealth_project_id}/workflows/publish { "name" : "demo-workflow", "version" : "1.0.0", "picture" : "", "labels" : [ "label1", "label2" ], "summary" : "summary", "description" : "description" }
-
响应示例 状态码: 200 OK { "count" : 1, "models" : [ { "id" : "56e0f1b0-ac10-46a5-8fa7-b26831d7d488", "name" : "demo_name", "description" : "description", "status" : "FINISHED", "create_time" : "2021-01-30T02:34:36Z", "finish_time" : "2021-01-30T02:53:26Z", "creator" : "demo-user", "shareable" : true, "data_quantity" : 1000, "type" : "binary", "file" : { "source" : "PRIVATE", "url" : "project:/file/data.csv" }, "losses" : [ 6.2, 1.2, 4.54 ], "metrics" : [ { "name" : "rmse", "value" : 0.3744 }, { "name" : "mae", "value" : 0.2844 }, { "name" : "pcc", "value" : 0.4871 } ], "base_model_id" : "pangu-drug-model", "base_model_name" : "pangu-drug-model" } ] }
-
响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 models Array of ModelDto objects 模型列表。 count Integer 模型总数。 表5 ModelDto 参数 参数类型 描述 name String 模型名称。 id String 模型ID。 type String 模型类型。 create_time String 模型创建时间。 finish_time String 模型结束时间。 creator String 创建模型的用户名称。 status String 作业状态。 shareable Boolean 是否打开组织共享。 data_quantity Integer 模型数据量。 file ModelFile object 模型数据来源。 value_range ValueRange object 区间上下限,仅回归型存在。 description String 模型描述信息。 failed_message String 失败提示,当作业执行失败时会返回。 losses Array of floats 模型训练loss信息。 metrics Array of ModelMetric objects 模型评估指标。 base_model_id String 基模型id。 缺省值:pangu-drug-model base_model_name String 基模型名称。 缺省值:pangu-drug-model 表6 ModelFile 参数 参数类型 描述 source String 模型数据文件来源。 枚举值: public private url String 文件URL,用户私有数据中心为项目路径、公共数据场景为obs地址。 最小长度:1 最大长度:2000 eihealth_project_id String 模型文件所在项目id,仅文件为数据中心时填写。 最小长度:1 最大长度:128 表7 ValueRange 参数 参数类型 描述 lower Float 区间下限,仅回归型存在。 upper Float 区间上限,仅回归型存在。 表8 ModelMetric 参数 参数类型 描述 name String 评估指标的名称。 最小长度:1 最大长度:32 value Float 评估指标的评估结果。
-
URI GET /v1/{project_id}/drug-models 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 search_key 否 String 模糊搜索值。 最小长度:0 最大长度:1024 creator_list 否 Array 创建者列表。 最小长度:1 最大长度:128 数组长度:0 - 50 type_list 否 Array 模型类型列表。 数组长度:0 - 10 status_list 否 Array 模型状态列表。 数组长度:0 - 10 sort_key 否 String 排序规则 目前默认时间降序,支持根据create_time|finish_time|base_model_name。 sort_dir 否 String 排序规则 目前默认时间降序。 缺省值:DESC create_start_time 否 Long 最小创建时间。 最小值:1000000000000 最大值:9999999999999 create_end_time 否 Long 最大创建时间。 最小值:1000000000000 最大值:9999999999999 finish_start_time 否 Long 最小结束时间。 最小值:1000000000000 最大值:9999999999999 finish_end_time 否 Long 最大结束时间。 最小值:1000000000000 最大值:9999999999999 limit 否 Integer 限制量,单次查询总量,必须由数字组成,默认为100,取值范围[1,1000]。 最小值:1 最大值:1000 缺省值:100 offset 否 Integer 偏移量,查询起始偏移,必须由数字组成,默认为0,取值范围[0,100000000]。 最小值:0 最大值:100000000 缺省值:0 base_model_list 否 Array 基模型id列表。 最小长度:0 最大长度:128 数组长度:0 - 10
-
响应示例 状态码: 200 OK { "basic_info" : { "id" : "baabcb56-5bb6-11eb-8a0d-fa163e3ddba1", "name" : "demo-job", "labels" : [ "labelA", "labelB" ], "status" : "FINISHED", "type" : "OPTIMIZATION", "create_time" : "2021-01-30T02:34:36Z", "start_time" : "2021-01-30T02:34:37Z", "finish_time" : "2021-01-30T02:53:26Z", "failed_message" : "null", "user_name" : "demo-user-name", "output_dir" : "job-analysis/job-name", "expect_charge_num" : 1, "real_charge_num" : 1 }, "smiles" : "string", "num_trials" : 500, "binding_site" : { "name" : "binding_name", "receptor" : { "source" : "PRIVATE", "url" : "project:/test.pdb" }, "bounding_box" : { "center" : [ 0, 0, 0 ], "size" : [ 500, 500, 500 ] }, "remove_ion" : false, "remove_water" : false, "remove_ligand" : true }, "weak_constraints" : [ { "name" : "eye_corrosion", "type" : "bool", "bool" : true } ], "strong_constraints" : [ { "name" : "sascore", "type" : "range", "range" : [ 0, 1 ] } ], "cluster_result" : { "method" : "hiq_mc", "output_dir" : "project://bucket/path/to/task/dir/", "status" : "finished", "failed_reasons" : [ { "reason" : "failed reason" }, { "count" : 1 } ] } }
-
响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 basic_info DrugJobDto object 作业基本信息。 smiles String 分子SMILES表达式。 最小长度:1 最大长度:512 molecule_file DrugFile object 分子文件。 num_trials Integer 生成分子数量。 最小值:0 最大值:5000 binding_site BindSiteDto object 结合位点。 binding_sites Array of BindSiteDto objects 受体列表和受体是二选一的关系,受体列表优先级最高。 数组长度:0 - 2 weak_constraints Array of WeakConstraintDto objects 弱约束集合。 strong_constraints Array of StrongConstraintDto objects 强约束集合。 sampler_mixin_weight Float 初始化采样权重。 base_model BaseModel object 基模型。 models Array of BasicDrugModel objects 模型列表。 cluster_result ClusterJobRsp object 聚类结果信息。 表4 DrugJobDto 参数 参数类型 描述 id String 作业id。 name String 作业的名称,取值范围:[1,63],允许大小写字母、数字、以及特殊字符中划线(-)。 labels Array of strings 作业标签。 status String 作业状态。 type String 作业类型。 create_time String 作业创建时间。 finish_time String 作业结束时间。 start_time String 作业开始时间。 failed_message String 失败提示,当作业执行失败时会返回。 user_name String 创建任务的用户名称。 output_dir String 作业结果输出目录。 expect_charge_num Double 预估功能调用消耗次数。 real_charge_num Double 实际功能调用消耗次数。 progress Progress object 作业进度信息。 表5 Progress 参数 参数类型 描述 overall Float 整体进度。 estimated_finish_time Long 预计结束时间,毫秒。 表6 DrugFile 参数 参数类型 描述 source String 受体的数据源:外部网络数据(如R CS B在线数据库)、用户私有数据中心、承载租户公共数据(含样例/公共库)。 枚举值: EXTRANET PRIVATE PUBLIC RAW url String 文件URL,当数据源为外部网络数据时为https地址;用户私有数据中心为项目路径、公共数据场景为obs地址。 最小长度:1 最大长度:2000 format String 文件格式,支持PDB、SDF、MOL2、SMI,仅数据源为RAW时提供。 最小长度:1 最大长度:6 data String 文件原始数据,仅数据源为RAW时提供。 最小长度:0 最大长度:10000000 表7 BindSiteDto 参数 参数类型 描述 name String 靶点名称,只能设置为target1或者target2。 最小长度:1 最大长度:128 receptor ReceptorDrugFile object 受体文件 bounding_box BoundingBoxDto object 结合口袋,包含口袋中心位置和尺寸大小。 remove_ion Boolean 去除受体中的离子。 缺省值:true remove_water Boolean 去除受体中的水分子。 缺省值:true remove_ligand Boolean 去除受体中的配体分子。 缺省值:true add_hydrogen Boolean 增加氢原子。 缺省值:false 表8 ReceptorDrugFile 参数 参数类型 描述 source String 受体的数据源:外部网络数据(如RCSB在线数据库)、用户私有数据中心、承载租户公共数据(含样例/公共库)。 枚举值: EXTRANET PRIVATE PUBLIC RAW url String 文件URL,当数据源为外部网络数据时为https地址;用户私有数据中心为项目路径、公共数据场景为obs地址。 最小长度:1 最大长度:2000 format String 文件格式,仅支持PDB,仅数据源为RAW时提供。 最小长度:1 最大长度:6 data String 文件原始数据,仅数据源为RAW时提供。 最小长度:0 最大长度:10000000 表9 BoundingBoxDto 参数 参数类型 描述 center Array of floats 口袋中心坐标; x, y, z轴的坐标。 最小值:-9999999 最大值:99999999 数组长度:3 - 3 size Array of floats 口袋尺寸大小; x, y, z轴的大小。 最小值:2 最大值:500 数组长度:3 - 3 padding Float 填充。 最小值:0 最大值:20 表10 WeakConstraintDto 参数 参数类型 描述 id String 自定义模型id,仅弱约束为模型时填写。 最小长度:1 最大长度:128 name String 属性名称。 最小长度:1 最大长度:128 type String 属性约束类型。 枚举值: bool range struct minimize maximize interaction bool Boolean 属性约束类型bool的参数。 range Array of floats 属性约束类型range的参数。 最小值:-9999 最大值:9999 数组长度:2 - 2 struct StructureConstraintParamsDto object 结构约束参数。 quantiles Array of floats 属性约束类型minimize和maximize的参数。 最小值:0.0 最大值:1.0 数组长度:2 - 2 interaction InteractionConstraintDto object 相互作用力约束参数。 表11 StrongConstraintDto 参数 参数类型 描述 id String 自定义模型id,仅强约束为模型时填写。 最小长度:1 最大长度:128 name String 属性名称。 最小长度:1 最大长度:128 type String 属性约束类型。 枚举值: bool range struct interaction bool Boolean 属性约束类型bool的参数。 range Array of floats 属性约束类型range的参数。 最小值:-9999 最大值:9999 数组长度:2 - 2 struct StructureConstraintParamsDto object 结构约束参数。 interaction InteractionConstraintDto object 相互作用力约束参数。 表12 StructureConstraintParamsDto 参数 参数类型 描述 structs Array of strings 子结构SMILES。 最小长度:1 最大长度:120 数组长度:1 - 8 exclusive Boolean 是否排除子结构。 operator String 多个子结构之间的逻辑关系。 枚举值: or and 表13 InteractionConstraintDto 参数 参数类型 描述 interactions Array of Interaction objects 相互作用力列表。 数组长度:1 - 8 exclusive Boolean 是否排除指定的约束作用力。 operator String 多个作用力之间的逻辑关系。 枚举值: or and 表14 Interaction 参数 参数类型 描述 binding_site String 靶点,只支持target1或target2。 最小长度:1 最大长度:128 type String 相互作用力类型:氢键、疏水作用、盐桥、π-π堆积、π-阳离子。 枚举值: hydrogen_bond hydrophobic_action salt_bridge pi_stacking pi_cation amino_acid String 氨基酸。 最小长度:4 最大长度:16 表15 BaseModel 参数 参数类型 描述 id String 基模型id。 缺省值:pangu-drug-model 最小长度:1 最大长度:128 name String 基模型名称。 缺省值:pangu-drug-model 最小长度:1 最大长度:128 表16 BasicDrugModel 参数 参数类型 描述 id String 模型ID。 task_id String 任务ID。 name String 模型名称。 creator String 模型创建者。 type String 模型类型。 value_range ValueRange object 区间上下限,仅回归型存在。 description String 模型描述信息。 表17 ValueRange 参数 参数类型 描述 lower Float 区间下限,仅回归型存在。 upper Float 区间上限,仅回归型存在。 表18 ClusterJobRsp 参数 参数类型 描述 method String 分子聚类方法。 output_dir String 分子聚类输出结果。 status String 作业结果信息。 failed_reasons Array of FailedReasonRecord objects 部分失败原因和数量。 表19 FailedReasonRecord 参数 参数类型 描述 reason String 失败原因。 count Integer 失败数量。
-
URI GET /v1/{project_id}/eihealth-projects/{eihealth_project_id}/drug-jobs/optimization/{job_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 eihealth_project_id 是 String 平台项目ID。 最小长度:1 最大长度:128 job_id 是 String 作业id。 最小长度:1 最大长度:128
-
响应示例 状态码: 200 OK { "jobs" : [ { "id" : "baabcb56-5bb6-11eb-8a0d-fa163e3ddba1", "name" : "demo-job", "labels" : [ "labelA", "labelB" ], "status" : "FINISHED", "type" : "OPTIMIZATION", "create_time" : "2021-01-30T02:34:36Z", "start_time" : "2021-01-30T02:34:37Z", "finish_time" : "2021-01-30T02:53:26Z", "failed_message" : "null", "user_name" : "demo-user-name", "output_dir" : "job-analysis/job-name", "expect_charge_num" : 1, "real_charge_num" : 1 } ], "count" : 1 }
-
URI GET /v1/{project_id}/eihealth-projects/{eihealth_project_id}/drug-jobs 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 eihealth_project_id 是 String 平台项目ID。 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 limit 否 Integer 限制量,单次查询总量,必须由数字组成,默认为100,取值范围[1,1000]。 最小值:1 最大值:1000 缺省值:100 offset 否 Integer 偏移量,查询起始偏移,必须由数字组成,默认为0,取值范围[0,100000000]。 最小值:0 最大值:100000000 缺省值:0 sort_dir 否 String 排序规则 目前默认时间降序。 缺省值:DESC sort_key 否 String 排序规则 目前默认时间降序,支持根据create_time|finish_time|running_time|total_time排序。 job_name 否 String 作业名称。 最小长度:1 最大长度:128 labels 否 Array 标签列表。 最小长度:1 最大长度:32 数组长度:0 - 5 status_list 否 Array 作业运行状态列表, 支持WAITING|RUNNING|FINISHED|FAILED|CANCELLED。 数组长度:0 - 10 type_list 否 Array 作业类型列表, 支持DOCKING|OPTIMIZATION|SYNTHESIS|FEP|POCKET_DETECTION|ADMET|SEARCH|POC_MOL_DESIGN|GENERATION|CPI|TARGET_OPT。 数组长度:0 - 10 create_start_time 否 Long 最小创建时间。 最小值:1000000000000 最大值:9999999999999 create_end_time 否 Long 最大创建时间。 最小值:1000000000000 最大值:9999999999999 finish_start_time 否 Long 最小结束时间。 最小值:1000000000000 最大值:9999999999999 finish_end_time 否 Long 最大结束时间。 最小值:1000000000000 最大值:9999999999999 total_time_range 否 String 总运行时长, 支持ONE_DAY_MORE|ONE_DAY|ONE_HOUR|TWELVE_HOUR。
-
响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 jobs Array of DrugJobDto objects 作业列表。 count Integer 作业总数。 表5 DrugJobDto 参数 参数类型 描述 id String 作业id。 name String 作业的名称,取值范围:[1,63],允许大小写字母、数字、以及特殊字符中划线(-)。 labels Array of strings 作业标签。 status String 作业状态。 type String 作业类型。 create_time String 作业创建时间。 finish_time String 作业结束时间。 start_time String 作业开始时间。 failed_message String 失败提示,当作业执行失败时会返回。 user_name String 创建任务的用户名称。 output_dir String 作业结果输出目录。 expect_charge_num Double 预估功能调用消耗次数。 real_charge_num Double 实际功能调用消耗次数。 progress Progress object 作业进度信息。 表6 Progress 参数 参数类型 描述 overall Float 整体进度。 estimated_finish_time Long 预计结束时间,毫秒。
-
响应示例 状态码: 200 OK { "workflows" : [ { "id" : "baabcb56-5bb6-11eb-8a0d-fa163e3ddba1", "name" : "demo-workflow", "version" : "1.0.0", "summary" : "summary", "description" : "description", "labels" : [ "labelA", "labelB" ], "create_time" : "2021-01-30T02:34:36Z", "update_time" : "2021-01-30T02:53:26Z", "user_name" : "gwj-test-01" } ], "count" : 1 }
-
响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 workflows Array of WorkflowListDto objects 所查询类型的流程总数 count Integer 当前页的流程列表 表5 WorkflowListDto 参数 参数类型 描述 id String 流程id name String 流程名称 version String 流程版本 summary String 简短描述信息 description String 描述信息 labels Array of strings 流程标签 create_time String 创建流程时间 update_time String 更新流程时间 user_name String 创建用户名称 source_project_name String 源项目名称 source_resource_id String 源资源id
-
URI GET /v1/{project_id}/eihealth-projects/{eihealth_project_id}/workflows 表1 路径参数 参数 是否必选 参数类型 描述 eihealth_project_id 是 String 平台项目ID,您可以在平台单击所需的项目名称,进入项目设置页面查看。 最小长度:1 最大长度:128 project_id 是 String 华为云项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 表2 Query参数 参数 是否必选 参数类型 描述 name 否 String 流程名称 最小长度:1 最大长度:56 version 否 String 流程版本 最小长度:1 最大长度:24
-
请求示例 创建模型,模型名称为model_name,类型为二分型,上传项目桶中file/test.csv的模型数据,打开共享开关。 https://{endpoint}/v1/{project_id}/drug-models { "name" : "model_name", "type" : "binary", "description" : "simple model", "file" : { "url" : "project:/file/test.csv", "source" : "private" }, "shareable" : true }
-
请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限,获取Token接口响应消息头中X-Subject-Token的值即为Token。 最小长度:1 最大长度:32768 表3 请求Body参数 参数 是否必选 参数类型 描述 name 是 String 模型名称,取值范围:[5,32],允许大小写字母、数字、下划线(_)、中划线(-)和空格,只能以字母开头。 最小长度:5 最大长度:32 description 否 String 模型描述信息。 最小长度:0 最大长度:1024 type 是 String 模型类型。 枚举值: binary numerical file 是 ModelFile object 模型数据来源。 shareable 否 Boolean 是否打开组织共享。 缺省值:false base_model_id 否 String 基模型id。 缺省值:pangu-drug-model 最小长度:1 最大长度:128 表4 ModelFile 参数 是否必选 参数类型 描述 source 是 String 模型数据文件来源。 枚举值: public private url 是 String 文件URL,用户私有数据中心为项目路径、公共数据场景为obs地址。 最小长度:1 最大长度:2000 eihealth_project_id 否 String 模型文件所在项目id,仅文件为数据中心时填写。 最小长度:1 最大长度:128
-
URI DELETE /v1/{project_id}/eihealth-projects/{eihealth_project_id}/workflows/{workflow_id} 表1 路径参数 参数 是否必选 参数类型 描述 eihealth_project_id 是 String 平台项目ID,您可以在平台单击所需的项目名称,进入项目设置页面查看。 最小长度:1 最大长度:128 project_id 是 String 华为云项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128 workflow_id 是 String 流程id 最小长度:1 最大长度:128
-
响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 quotas Array of QuotaRsp objects 配额信息列表 count Integer 配额列表个数 表4 QuotaRsp 参数 参数类型 描述 name String 配额项名称,支持USER,PROJECT,USER_PROJECT,STORAGE,PROJECT_APP,PROJECT_NOTEBOOK,PROJECT_WORKFLOW,PROJECT_IMAGE total Integer 配额 unit String 配额项单位 usage Integer 配额使用量
-
基本概念 账号 用户注册华为云时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用创建的用户进行日常管理工作。 用户 由账号在 IAM 中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone) 一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 华为云的区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中购买资源,然后以子项目为单位进行授权,使得用户仅能访问特定子项目中资源,使得资源的权限控制更加精确。 图1 项目隔离模型 父主题: 使用前必读
-
URI POST /v1/{project_id}/eihealth-projects/{eihealth_project_id}/workflows 表1 路径参数 参数 是否必选 参数类型 描述 eihealth_project_id 是 String 平台项目ID,您可以在平台单击所需的项目名称,进入项目设置页面查看。 最小长度:1 最大长度:128 project_id 是 String 华为云项目ID,您可以从获取项目ID中获取。 最小长度:1 最大长度:128
-
请求示例 创建流程,流程的名称为demo-workflow,版本为1.0.0。 https://eihealth.cn-north-4.myhuaweicloud.com/v1/{project_id}/eihealth-projects/{eihealth_project_id}/workflows { "name" : "demo-workflow", "version" : "1.0.0", "summary" : "summary", "description" : "description", "labels" : [ "labelA", "labelB" ], "timeout" : 1440, "output_dir" : "/workflow", "tasks" : [ { "task_name" : "app1-1", "app_id" : "baabcb56-5bb6-11eb-8a0d-fa163e3ddba1", "display_name" : "步骤1", "output_dir" : "/task", "resources" : { "cpu_type" : "X86", "cpu" : "1C", "memory" : "1G", "gpu_type" : "GPU", "gpu" : 0 }, "location" : { "x" : 100, "y" : 100 }, "inputs" : [ { "name" : "dir-parameter", "values" : [ "/test" ] } ] } ] }
-
提交训练作业常见问题 报错信息:Exception: You have attempted to create more buckets than allowed 原因分析:由于桶的数量多于限额,无法自动创建。 解决方法:用户可以删除一个桶,或者直接指定一个已存在的桶(修改变量obs_bucket的值)。 报错信息:"errorMessage":"The number of namespaces exceeds the upper limit"或"namespace is invalid" 原因分析:SWR组织数限额,SWR组织默认最多只能创建5个组织。 解决方法:用户可以删除一个SWR组织,或者直接指定一个已存在的SWR组织(修改变量image_organization的值)。 报错信息:standard_init_linux.go:224: exec user process caused "exet format error" 原因分析:可能由于训练规格错误导致训练作业卡死。 解决方法:请参考说明查询资源规格。 报错信息:报错镜像失败,报错:401,'Unauthorized',b'{errors":[{"errorCode":"SVCSTG.SWR.4010000",errorMessage":"Authenticate Error",……}] 原因分析:远程连接Notebook时需要输入鉴权信息。 解决方法:传入AK,SK信息。 1 2 3 4 5 6 # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 __AK = os.environ["HUAWEICLOUD_SDK_AK"] __SK = os.environ["HUAWEICLOUD_SDK_SK"] # 如果进行了加密还需要进行解密操作 session = Session(access_key=__AK,secret_key=__SK, project_id='***', region_name='***')
-
步骤5:使用SDK提交训练作业 本地调测完成后可以提交训练作业。因为数据在Notebook中,设置InputData中“is_local_source”的参数为“True”,会自动将本地数据同步上传到OBS中。 步骤如下: 在“/home/ma-user/work/models/official/cv/resnet/”下创建train_notebook.py, 复制代码至train_notebook.py, 运行train_notebook.py,进行训练作业提交。 # train_notebook.py # 导入ModelArts SDK的依赖,并初始化Session,此处的ak、sk、project_id、region_name请替换成用户自己的信息 from modelarts.train_params import TrainingFiles from modelarts.train_params import OutputData from modelarts.train_params import InputData from modelarts.estimatorV2 import Estimator from modelarts.session import Session # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 __AK = os.environ["HUAWEICLOUD_SDK_AK"] __SK = os.environ["HUAWEICLOUD_SDK_SK"] # 如果进行了加密还需要进行解密操作 session = Session(access_key=__AK,secret_key=__SK, project_id='***', region_name='***') # 样例中为了方便默认创建一个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/" # 训练所需的代码路径,代码会自动从本地上传至OBS code_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 SWRManagement image_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 os ENV_NAME=os.getenv('ENV_NAME') # 启动训练任务:使用user_command(shell命令)方式启动训练任务 # 注意:训练启动默认的工作路径为"/home/ma-user/modelarts/user-job-dir",而代码上传路径为"./resnet/${code_dir}"下 # --enable_modelarts=True 该代码仓已适配ModelArts estimator = 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", # 虚拟资源规格,不同region的资源规格可能不同,请参考“Estimator参数说明”表下的说明查询修改 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'或云端资源规格。每个region的资源规格可能是不同的,可以通过下述说明查询对应的资源规格信息。 train_instance_count 节点数 log_url 日志输出路径 job_name 作业名称,不可以重复 train_instance_type表示训练的资源规格,每个region的资源规格可能是不同的。通过如下方法查询资源规格: 公共资源池执行如下命令查询 from modelarts.session import Session from modelarts.estimatorV2 import Estimator from pprint import pprint # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 __AK = os.environ["HUAWEICLOUD_SDK_AK"] __SK = os.environ["HUAWEICLOUD_SDK_SK"] # 如果进行了加密还需要进行解密操作 session = Session(access_key=__AK,secret_key=__SK, project_id='***', region_name='***') info = Estimator.get_train_instance_types(session=session) pprint(info) 专属池规格 ModelArts专属资源池统一使用虚拟子规格,不区分GPU和Ascend。资源规格参考表2查询。 表2 专属资源池虚拟规格的说明 train_instance_type 说明 modelarts.pool.visual.xlarge 1卡 modelarts.pool.visual.2xlarge 2卡 modelarts.pool.visual.4xlarge 4卡 modelarts.pool.visual.8xlarge 8卡
-
训练输出保存结构说明 ModelArts训练作业的模型输出和日志信息会定时同步到指定的OBS中,本示例中模型输出路径和日志输出路径分别为f"{default_obs_dir}/mindspore_model/output/"和f"{default_obs_dir}/mindspore_model/logs/",用户可以在OBS中查看训练输出信息。 本示例中训练输出保存在OBS的目录结构如下所示: ${your_bucket} └── intermidiate ├── dataset │ └── flower_photos │ └── flower_photos.zip └── mindspore_model ├── logs │ └── xxx-xxx-xxx--0.log ├── output │ └── 20220627-105226-resnet50-224 └── mindspore-image-models.zip
-
加速慢算子的执行速度 首先需要寻找执行速度比较慢的NPU算子列表,Kernel视图包含在NPU上执行的所有算子的信息,主要用于确认高耗时算子。 图7 Kernel视图 推荐基于以下思路尝试优化: 搜索Cast类算子,查看是否Cast类算子最大耗时超过30us或者总耗时占比超过1%,如果超过,需尝试启动混合精度训练,详见此处。 图8 Cast类算子 基于Accelerator Core排序,统计AI_CPU算子,如果有AI_CPU类算子执行时长超过1000us或者AI_CPU类算子总执行时长占比超过10%,可尝试修改代码替换API_CPU算子。 需要注意:PyTorch Adaptor针对部分算子,会基于输入类型下发不同运行硬件的算子,所以除了使用同语义算子替换API_CPU算子外,还可以通过修改输入类型使算子下发到API_CORE上(比如torch.topk在参数为一维list使用API_CPU计算,多维参数则基于AI_CORE Vector计算)。 图9 Accelerator Core排序 如果遇到算子运行期间NPU的计算单元和存储单元使用率都未达到80%(查看aiv_*_ratio和aic_*_ratio是否达到0.8),或者算子的“Block Dim”小于AI Core/Vector Core,可尝试使用AOE算子调优,提高NPU硬件资源利用率。 图10 aiv_*_ratio 针对总耗时最长、平均执行耗时最长以及最大耗时的三种排序的TOP算子,可联系华为工程师获得帮助。 图11 耗时排序
-
训练profiling工具使用 五板斧操作之后,如果性能仍然不满足要求,便需要通过profiling工具采集性能数据,基于数据分析是哪个环节、哪个算子导致的性能消耗,进而做性能优化。 目前有两种方式采集训练profiling数据:Ascend PyTorch Profiler数据采集与分析和E2E Profiling数据采集与分析。 其中推荐使用Ascend PyTorch Profiler数据采集与分析方法,基于这种用法性能调优更高效,可以全面采集PyTorch训练场景下的性能数据,主要包括PyTorch层算子信息、CANN层算子信息、底层NPU算子信息、以及算子内存占用信息等,可以全方位分析PyTorch训练时的性能状态,有四种视图来展示PyTorch性能数据,其中Trace视图与第二种profiling方法展示同样的信息。第二种采集方式的优势主要在于不需要额外启动tensorboard服务来展示数据,在本地浏览器就能展示性能数据。 训练profiling工具使用说明: 通过键盘上的快捷键(w:放大/s:缩小/a:左移/d:右移)可以很方便地进行查看算子运行信息(tensorboard的Trace View页面和chrome的tracing页面都支持快捷键)。 如果是在docker中运行tensorboard,启动docker容器的时候,需要将tensorboard的端口映射到宿主机的端口,这样才能在浏览器基于宿主机的ip+宿主机的端口访问tensorboard服务;同时启动tensorboard的时候,需要“—bind_all”参数。 docker run -itd -p 12345:6006 my-image bash .... tensorboard --bind_all --logdir result_dir/ 图1 TensorBoard 性能调优是一个不断迭代的过程,每个版本的代码与profiling的对应关系需要提前做好规划,否则随着迭代次数的增多,无法梳理清楚某一版本的代码修改究竟是否带来性能提升或带来多少性能提升。推荐对应关系可以使用git commit来管理。 PyTorch API会调用其他API以及算子,调用关系在Trace View的Python cpu区域可以展示出来,如下图所示,tensor对象的*或者mul操作(对应图中的aten::mul)会调用aten::item和Mul算子,以此类推。其中如果某一个算子调用了Enqueue算子,代表该算子将会被下发到NPU中执行。鼠标点中某个算子/API,可查看对应详情,包括调用堆栈。 图2 调用关系 父主题: PyTorch迁移性能调优
-
优化算子下发 当发现NPU上有大量相邻算子之间有时间间隙出现时,代表算子下发的速度太慢导致NPU空等,NPU算力没有充分发挥,如下图所示。 图1 算子之间的时间间隙 优化该场景有三个思路: 加速算子下发。常用的优化方法有进程绑核(详见性能调优五板斧)、启用机器的cpu高性能模式、使用高性能磁盘、多级多卡训练场景下通信优化等。 融合多个算子的逻辑为单算子,从而减少算子下发的数量,请参见NPU融合算子API和亲和优化器。常用的优化方法为使用Ascend自带的优化后的融合算子、算子二进制优化(详见性能调优五板斧)或者开发者自己开发自定义融合算子。此外,PyTorch同语义代码的执行时间有差异,可基于对同语义代码进行Profiling分析,使用性能好的实现,比如“tensorA[:, None, :, :]”与“tensorA.unsqueeze(1)”为同语义,但是前者会调用3次“aten::slice”接口加一次“aten::unsqueeze”接口,后者只调用一次“aten::unsqueeze”接口,所以应该选择“tensorA.unsqueeze(1)”。 让NPU上运行的算子处理更多的数据,算子执行时间变长,单算子下发时间几乎不变,掩盖了算子下发慢的问题。常用的方法是尽可能地增大batch size,让每一个step的NPU计算量增加。 图2 优化思路 父主题: PyTorch迁移性能调优
-
相关操作 关闭TensorBoard方式如下: 方式1:单击下图所示的,进入TensorBoard实例管理界面,该界面记录了所有启动的TensorBoard实例,单击对应实例后面的SHUT DOWN即可停止该实例。 图8 单击SHUT DOWN停该实例 方式2:在开发环境JupyterLab中的“.ipynb”文件窗口中输入命令,关闭TensorBoard。PID在启动界面有提示或者通过ps -ef | grep tensorboard查看。 !kill PID 方式3:单击下方红框中的按钮可以关闭所有启动的TensorBoard实例。 图9 关闭所有启动的TensorBoard实例 方式4(不推荐):直接在JupyterLab中上关闭TensorBoard窗口,此方式仅关闭可视化窗口,并未关闭后台。
-
创建rf_admin_trust委托(可选) 进入华为云官网,打开控制台管理界面,鼠标移动至个人账号处,打开“ 统一身份认证 ”菜单。 图1 控制台管理界面 图2 统一身份认证菜单 进入“委托”菜单,搜索“rf_admin_trust”委托。 图3 委托列表 如果委托存在,则不用执行接下来的创建委托的步骤 如果委托不存在时执行接下来的步骤创建委托 单击步骤2界面中的“创建委托”按钮,在委托名称中输入“rf_admin_trust”,委托类型选择“云服务”,选择“ RFS ”,单击“下一步”。 图4 创建委托 在搜索框中输入“Tenant Administrator”权限,并勾选搜索结果。 图5 选择策略 选择“所有资源”,并单击下一步完成配置。 图6 设置授权范围 “委托”列表中出现“rf_admin_trust”委托则创建成功。 图7 委托列表
共100000条
- 1
- ...
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1001
- 1002
- 1003
- 1004
- 1005
- 1006
- 1007
- 1008
- 1009
- 1010
- 1011
- 1012
- 1013
- 1014
- 1015
- 1016
- 1017
- 1018
- 1019
- 1020
- 1021
- 1022
- 1023
- 1024
- 1025
- 1026
- 1027
- 1028
- 1029
- 1030
- 1031
- 1032
- 1033
- 1034
- 1035
- 1036
- 1037
- 1038
- 1039
- 1040
- 1041
- 1042
- 1043
- 1044
- 1045
- 1046
- 1047
- 1048
- 1049
- 1050
- 1051
- 1052
- 1053
- 1054
- 1055
- 1056
- 1057
- 1058
- 1059
- 1060
- 1061
- 1062
- 1063
- 1064
- 1065
- 1066
- 1067
- 1068
- 1069
- 1070
- 1071
- 1072
- 1073
- 1074
- 1075
- 1076
- 1077
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
- 1087
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1096
- 1097
- 1098
- 1099
- 1100
- 1101
- 1102
- 1103
- 1104
- 1105
- 1106
- 1107
- 1108
- 1109
- 1110
- 1111
- 1112
- 1113
- 1114
- 1115
- 1116
- 1117
- 1118
- 1119
- 1120
- 1121
- 1122
- 1123
- 1124
- 1125
- 1126
- 1127
- 1128
- 1129
- 1130
- 1131
- 1132
- 1133
- 1134
- 1135
- 1136
- 1137
- 1138
- 1139
- 1140
- 1141
- 1142
- 1143
- 1144
- 1145
- 1146
- 1147
- 1148
- 1149
- 1150
- 1151
- 1152
- 1153
- 1154
- 1155
- 1156
- 1157
- 1158
- 1159
- 1160
- 1161
- 1162
- 1163
- 1164
- 1165
- 1166
- 1167
- 1168
- 1169
- 1170
- 1171
- 1172
- 1173
- 1174
- 1175
- 1176
- 1177
- 1178
- 1179
- 1180
- 1181
- 1182
- 1183
- 1184
- 1185
- 1186
- 1187
- 1188
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1195
- 1196
- 1197
- 1198
- 1199
- 1200
- 1201
- 1202
- 1203
- 1204
- 1205
- 1206
- 1207
- 1208
- 1209
- 1210
- 1211
- 1212
- 1213
- 1214
- 1215
- 1216
- 1217
- 1218
- 1219
- 1220
- 1221
- 1222
- 1223
- 1224
- 1225
- 1226
- 1227
- 1228
- 1229
- 1230
- 1231
- 1232
- 1233
- 1234
- 1235
- 1236
- 1237
- 1238
- 1239
- 1240
- 1241
- 1242
- 1243
- 1244
- 1245
- 1246
- 1247
- 1248
- 1249
- 1250
- 1251
- 1252
- 1253
- 1254
- 1255
- 1256
- 1257
- 1258
- 1259
- 1260
- 1261
- 1262
- 1263
- 1264
- 1265
- 1266
- 1267
- 1268
- 1269
- 1270
- 1271
- 1272
- 1273
- 1274
- 1275
- 1276
- 1277
- 1278
- 1279
- 1280
- 1281
- 1282
- 1283
- 1284
- 1285
- 1286
- 1287
- 1288
- 1289
- 1290
- 1291
- 1292
- 1293
- 1294
- 1295
- 1296
- 1297
- 1298
- 1299
- 1300
- 1301
- 1302
- 1303
- 1304
- 1305
- 1306
- 1307
- 1308
- 1309
- 1310
- 1311
- 1312
- 1313
- 1314
- 1315
- 1316
- 1317
- 1318
- 1319
- 1320
- 1321
- 1322
- 1323
- 1324
- 1325
- 1326
- 1327
- 1328
- 1329
- 1330
- 1331
- 1332
- 1333
- 1334
- 1335
- 1336
- 1337
- 1338
- 1339
- 1340
- 1341
- 1342
- 1343
- 1344
- 1345
- 1346
- 1347
- 1348
- 1349
- 1350
- 1351
- 1352
- 1353
- 1354
- 1355
- 1356
- 1357
- 1358
- 1359
- 1360
- 1361
- 1362
- 1363
- 1364
- 1365
- 1366
- 1367
- 1368
- 1369
- 1370
- 1371
- 1372
- 1373
- 1374
- 1375
- 1376
- 1377
- 1378
- 1379
- 1380
- 1381
- 1382
- 1383
- 1384
- 1385
- 1386
- 1387
- 1388
- 1389
- 1390
- 1391
- 1392
- 1393
- 1394
- 1395
- 1396
- 1397
- 1398
- 1399
- 1400
- 1401
- 1402
- 1403
- 1404
- 1405
- 1406
- 1407
- 1408
- 1409
- 1410
- 1411
- 1412
- 1413
- 1414
- 1415
- 1416
- 1417
- 1418
- 1419
- 1420
- 1421
- 1422
- 1423
- 1424
- 1425
- 1426
- 1427
- 1428
- 1429
- 1430
- 1431
- 1432
- 1433
- 1434
- 1435
- 1436
- 1437
- 1438
- 1439
- 1440
- 1441
- 1442
- 1443
- 1444
- 1445
- 1446
- 1447
- 1448
- 1449
- 1450
- 1451
- 1452
- 1453
- 1454
- 1455
- 1456
- 1457
- 1458
- 1459
- 1460
- 1461
- 1462
- 1463
- 1464
- 1465
- 1466
- 1467
- 1468
- 1469
- 1470
- 1471
- 1472
- 1473
- 1474
- 1475
- 1476
- 1477
- 1478
- 1479
- 1480
- 1481
- 1482
- 1483
- 1484
- 1485
- 1486
- 1487
- 1488
- 1489
- 1490
- 1491
- 1492
- 1493
- 1494
- 1495
- 1496
- 1497
- 1498
- 1499
- 1500
- 1501
- 1502
- 1503
- 1504
- 1505
- 1506
- 1507
- 1508
- 1509
- 1510
- 1511
- 1512
- 1513
- 1514
- 1515
- 1516
- 1517
- 1518
- 1519
- 1520
- 1521
- 1522
- 1523
- 1524
- 1525
- 1526
- 1527
- 1528
- 1529
- 1530
- 1531
- 1532
- 1533
- 1534
- 1535
- 1536
- 1537
- 1538
- 1539
- 1540
- 1541
- 1542
- 1543
- 1544
- 1545
- 1546
- 1547
- 1548
- 1549
- 1550
- 1551
- 1552
- 1553
- 1554
- 1555
- 1556
- 1557
- 1558
- 1559
- 1560
- 1561
- 1562
- 1563
- 1564
- 1565
- 1566
- 1567
- 1568
- 1569
- 1570
- 1571
- 1572
- 1573
- 1574
- 1575
- 1576
- 1577
- 1578
- 1579
- 1580
- 1581
- 1582
- 1583
- 1584
- 1585
- 1586
- 1587
- 1588
- 1589
- 1590
- 1591
- 1592
- 1593
- 1594
- 1595
- 1596
- 1597
- 1598
- 1599
- 1600
- 1601
- 1602
- 1603
- 1604
- 1605
- 1606
- 1607
- 1608
- 1609
- 1610
- 1611
- 1612
- 1613
- 1614
- 1615
- 1616
- 1617
- 1618
- 1619
- 1620
- 1621
- 1622
- 1623
- 1624
- 1625
- 1626
- 1627
- 1628
- 1629
- 1630
- 1631
- 1632
- 1633
- 1634
- 1635
- 1636
- 1637
- 1638
- 1639
- 1640
- 1641
- 1642
- 1643
- 1644
- 1645
- 1646
- 1647
- 1648
- 1649
- 1650
- 1651
- 1652
- 1653
- 1654
- 1655
- 1656
- 1657
- 1658
- 1659
- 1660
- 1661
- 1662
- 1663
- 1664
- 1665
- 1666
- 1667
- 1668
- 1669
- 1670
- 1671
- 1672
- 1673
- 1674
- 1675
- 1676
- 1677
- 1678
- 1679
- 1680
- 1681
- 1682
- 1683
- 1684
- 1685
- 1686
- 1687
- 1688
- 1689
- 1690
- 1691
- 1692
- 1693
- 1694
- 1695
- 1696
- 1697
- 1698
- 1699
- 1700
- 1701
- 1702
- 1703
- 1704
- 1705
- 1706
- 1707
- 1708
- 1709
- 1710
- 1711
- 1712
- 1713
- 1714
- 1715
- 1716
- 1717
- 1718
- 1719
- 1720
- 1721
- 1722
- 1723
- 1724
- 1725
- 1726
- 1727
- 1728
- 1729
- 1730
- 1731
- 1732
- 1733
- 1734
- 1735
- 1736
- 1737
- 1738
- 1739
- 1740
- 1741
- 1742
- 1743
- 1744
- 1745
- 1746
- 1747
- 1748
- 1749
- 1750
- 1751
- 1752
- 1753
- 1754
- 1755
- 1756
- 1757
- 1758
- 1759
- 1760
- 1761
- 1762
- 1763
- 1764
- 1765
- 1766
- 1767
- 1768
- 1769
- 1770
- 1771
- 1772
- 1773
- 1774
- 1775
- 1776
- 1777
- 1778
- 1779
- 1780
- 1781
- 1782
- 1783
- 1784
- 1785
- 1786
- 1787
- 1788
- 1789
- 1790
- 1791
- 1792
- 1793
- 1794
- 1795
- 1796
- 1797
- 1798
- 1799
- 1800
- 1801
- 1802
- 1803
- 1804
- 1805
- 1806
- 1807
- 1808
- 1809
- 1810
- 1811
- 1812
- 1813
- 1814
- 1815
- 1816
- 1817
- 1818
- 1819
- 1820
- 1821
- 1822
- 1823
- 1824
- 1825
- 1826
- 1827
- 1828
- 1829
- 1830
- 1831
- 1832
- 1833
- 1834
- 1835
- 1836
- 1837
- 1838
- 1839
- 1840
- 1841
- 1842
- 1843
- 1844
- 1845
- 1846
- 1847
- 1848
- 1849
- 1850
- 1851
- 1852
- 1853
- 1854
- 1855
- 1856
- 1857
- 1858
- 1859
- 1860
- 1861
- 1862
- 1863
- 1864
- 1865
- 1866
- 1867
- 1868
- 1869
- 1870
- 1871
- 1872
- 1873
- 1874
- 1875
- 1876
- 1877
- 1878
- 1879
- 1880
- 1881
- 1882
- 1883
- 1884
- 1885
- 1886
- 1887
- 1888
- 1889
- 1890
- 1891
- 1892
- 1893
- 1894
- 1895
- 1896
- 1897
- 1898
- 1899
- 1900
- 1901
- 1902
- 1903
- 1904
- 1905
- 1906
- 1907
- 1908
- 1909
- 1910
- 1911
- 1912
- 1913
- 1914
- 1915
- 1916
- 1917
- 1918
- 1919
- 1920
- 1921
- 1922
- 1923
- 1924
- 1925
- 1926
- 1927
- 1928
- 1929
- 1930
- 1931
- 1932
- 1933
- 1934
- 1935
- 1936
- 1937
- 1938
- 1939
- 1940
- 1941
- 1942
- 1943
- 1944
- 1945
- 1946
- 1947
- 1948
- 1949
- 1950
- 1951
- 1952
- 1953
- 1954
- 1955
- 1956
- 1957
- 1958
- 1959
- 1960
- 1961
- 1962
- 1963
- 1964
- 1965
- 1966
- 1967
- 1968
- 1969
- 1970
- 1971
- 1972
- 1973
- 1974
- 1975
- 1976
- 1977
- 1978
- 1979
- 1980
- 1981
- 1982
- 1983
- 1984
- 1985
- 1986
- 1987
- 1988
- 1989
- 1990
- 1991
- 1992
- 1993
- 1994
- 1995
- 1996
- 1997
- 1998
- 1999
- 2000
- 2001
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
- 2027
- 2028
- 2029
- 2030
- 2031
- 2032
- 2033
- 2034
- 2035
- 2036
- 2037
- 2038
- 2039
- 2040
- 2041
- 2042
- 2043
- 2044
- 2045
- 2046
- 2047
- 2048
- 2049
- 2050
- 2051
- 2052
- 2053
- 2054
- 2055
- 2056
- 2057
- 2058
- 2059
- 2060
- 2061
- 2062
- 2063
- 2064
- 2065
- 2066
- 2067
- 2068
- 2069
- 2070
- 2071
- 2072
- 2073
- 2074
- 2075
- 2076
- 2077
- 2078
- 2079
- 2080
- 2081
- 2082
- 2083
- 2084
- 2085
- 2086
- 2087
- 2088
- 2089
- 2090
- 2091
- 2092
- 2093
- 2094
- 2095
- 2096
- 2097
- 2098
- 2099
- 2100
- 2101
- 2102
- 2103
- 2104
- 2105
- 2106
- 2107
- 2108
- 2109
- 2110
- 2111
- 2112
- 2113
- 2114
- 2115
- 2116
- 2117
- 2118
- 2119
- 2120
- 2121
- 2122
- 2123
- 2124
- 2125
- 2126
- 2127
- 2128
- 2129
- 2130
- 2131
- 2132
- 2133
- 2134
- 2135
- 2136
- 2137
- 2138
- 2139
- 2140
- 2141
- 2142
- 2143
- 2144
- 2145
- 2146
- 2147
- 2148
- 2149
- 2150
- 2151
- 2152
- 2153
- 2154
- 2155
- 2156
- 2157
- 2158
- 2159
- 2160
- 2161
- 2162
- 2163
- 2164
- 2165
- 2166
- 2167
- 2168
- 2169
- 2170
- 2171
- 2172
- 2173
- 2174
- 2175
- 2176
- 2177
- 2178
- 2179
- 2180
- 2181
- 2182
- 2183
- 2184
- 2185
- 2186
- 2187
- 2188
- 2189
- 2190
- 2191
- 2192
- 2193
- 2194
- 2195
- 2196
- 2197
- 2198
- 2199
- 2200
- 2201
- 2202
- 2203
- 2204
- 2205
- 2206
- 2207
- 2208
- 2209
- 2210
- 2211
- 2212
- 2213
- 2214
- 2215
- 2216
- 2217
- 2218
- 2219
- 2220
- 2221
- 2222
- 2223
- 2224
- 2225
- 2226
- 2227
- 2228
- 2229
- 2230
- 2231
- 2232
- 2233
- 2234
- 2235
- 2236
- 2237
- 2238
- 2239
- 2240
- 2241
- 2242
- 2243
- 2244
- 2245
- 2246
- 2247
- 2248
- 2249
- 2250
- 2251
- 2252
- 2253
- 2254
- 2255
- 2256
- 2257
- 2258
- 2259
- 2260
- 2261
- 2262
- 2263
- 2264
- 2265
- 2266
- 2267
- 2268
- 2269
- 2270
- 2271
- 2272
- 2273
- 2274
- 2275
- 2276
- 2277
- 2278
- 2279
- 2280
- 2281
- 2282
- 2283
- 2284
- 2285
- 2286
- 2287
- 2288
- 2289
- 2290
- 2291
- 2292
- 2293
- 2294
- 2295
- 2296
- 2297
- 2298
- 2299
- 2300
- 2301
- 2302
- 2303
- 2304
- 2305
- 2306
- 2307
- 2308
- 2309
- 2310
- 2311
- 2312
- 2313
- 2314
- 2315
- 2316
- 2317
- 2318
- 2319
- 2320
- 2321
- 2322
- 2323
- 2324
- 2325
- 2326
- 2327
- 2328
- 2329
- 2330
- 2331
- 2332
- 2333
- 2334
- 2335
- 2336
- 2337
- 2338
- 2339
- 2340
- 2341
- 2342
- 2343
- 2344
- 2345
- 2346
- 2347
- 2348
- 2349
- 2350
- 2351
- 2352
- 2353
- 2354
- 2355
- 2356
- 2357
- 2358
- 2359
- 2360
- 2361
- 2362
- 2363
- 2364
- 2365
- 2366
- 2367
- 2368
- 2369
- 2370
- 2371
- 2372
- 2373
- 2374
- 2375
- 2376
- 2377
- 2378
- 2379
- 2380
- 2381
- 2382
- 2383
- 2384
- 2385
- 2386
- 2387
- 2388
- 2389
- 2390
- ...
- 2391
- 2392
- 2393
- 2394
- 2395
- 2396
- 2397
- 2398
- 2399
- 2400
- 2401
- 2402
- 2403
- 2404
- 2405
- 2406
- 2407
- 2408
- 2409
- 2410
- 2411
- 2412
- 2413
- 2414
- 2415
- 2416
- 2417
- 2418
- 2419
- 2420
- 2421
- 2422
- 2423
- 2424
- 2425
- 2426
- 2427
- 2428
- 2429
- 2430
- 2431
- 2432
- 2433
- 2434
- 2435
- 2436
- 2437
- 2438
- 2439
- 2440
- 2441
- 2442
- 2443
- 2444
- 2445
- 2446
- 2447
- 2448
- 2449
- 2450
- 2451
- 2452
- 2453
- 2454
- 2455
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
- 2471
- 2472
- 2473
- 2474
- 2475
- 2476
- 2477
- 2478
- 2479
- 2480
- 2481
- 2482
- 2483
- 2484
- 2485
- 2486
- 2487
- 2488
- 2489
- 2490
- 2491
- 2492
- 2493
- 2494
- 2495
- 2496
- 2497
- 2498
- 2499
- 2500
- 2501
- 2502
- 2503
- 2504
- 2505
- 2506
- 2507
- 2508
- 2509
- 2510
- 2511
- 2512
- 2513
- 2514
- 2515
- 2516
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2523
- 2524
- 2525
- 2526
- 2527
- 2528
- 2529
- 2530
- 2531
- 2532
- 2533
- 2534
- 2535
- 2536
- 2537
- 2538
- 2539
- 2540
- 2541
- 2542
- 2543
- 2544
- 2545
- 2546
- 2547
- 2548
- 2549
- 2550
- 2551
- 2552
- 2553
- 2554
- 2555
- 2556
- 2557
- 2558
- 2559
- 2560
- 2561
- 2562
- 2563
- 2564
- 2565
- 2566
- 2567
- 2568
- 2569
- 2570
- 2571
- 2572
- 2573
- 2574
- 2575
- 2576
- 2577
- 2578
- 2579
- 2580
- 2581
- 2582
- 2583
- 2584
- 2585
- 2586
- 2587
- 2588
- 2589
- 2590
- 2591
- 2592
- 2593
- 2594
- 2595
- 2596
- 2597
- 2598
- 2599
- 2600
- 2601
- 2602
- 2603
- 2604
- 2605
- 2606
- 2607
- 2608
- 2609
- 2610
- 2611
- 2612
- 2613
- 2614
- 2615
- 2616
- 2617
- 2618
- 2619
- 2620
- 2621
- 2622
- 2623
- 2624
- 2625
- 2626
- 2627
- 2628
- 2629
- 2630
- 2631
- 2632
- 2633
- 2634
- 2635
- 2636
- 2637
- 2638
- 2639
- 2640
- 2641
- 2642
- 2643
- 2644
- 2645
- 2646
- 2647
- 2648
- 2649
- 2650
- 2651
- 2652
- 2653
- 2654
- 2655
- 2656
- 2657
- 2658
- 2659
- 2660
- 2661
- 2662
- 2663
- 2664
- 2665
- 2666
- 2667
- 2668
- 2669
- 2670
- 2671
- 2672
- 2673
- 2674
- 2675
- 2676
- 2677
- 2678
- 2679
- 2680
- 2681
- 2682
- 2683
- 2684
- 2685
- 2686
- 2687
- 2688
- 2689
- 2690
- 2691
- 2692
- 2693
- 2694
- 2695
- 2696
- 2697
- 2698
- 2699
- 2700
- 2701
- 2702
- 2703
- 2704
- 2705
- 2706
- 2707
- 2708
- 2709
- 2710
- 2711
- 2712
- 2713
- 2714
- 2715
- 2716
- 2717
- 2718
- 2719
- 2720
- 2721
- 2722
- 2723
- 2724
- 2725
- 2726
- 2727
- 2728
- 2729
- 2730
- 2731
- 2732
- 2733
- 2734
- 2735
- 2736
- 2737
- 2738
- 2739
- 2740
- 2741
- 2742
- 2743
- 2744
- 2745
- 2746
- 2747
- 2748
- 2749
- 2750
- 2751
- 2752
- 2753
- 2754
- 2755
- 2756
- 2757
- 2758
- 2759
- 2760
- 2761
- 2762
- 2763
- 2764
- 2765
- 2766
- 2767
- 2768
- 2769
- 2770
- 2771
- 2772
- 2773
- 2774
- 2775
- 2776
- 2777
- 2778
- 2779
- 2780
- 2781
- 2782
- 2783
- 2784
- 2785
- 2786
- 2787
- 2788
- 2789
- 2790
- 2791
- 2792
- 2793
- 2794
- 2795
- 2796
- 2797
- 2798
- 2799
- 2800
- 2801
- 2802
- 2803
- 2804
- 2805
- 2806
- 2807
- 2808
- 2809
- 2810
- 2811
- 2812
- 2813
- 2814
- 2815
- 2816
- 2817
- 2818
- 2819
- 2820
- 2821
- 2822
- 2823
- 2824
- 2825
- 2826
- 2827
- 2828
- 2829
- 2830
- 2831
- 2832
- 2833
- 2834
- 2835
- 2836
- 2837
- 2838
- 2839
- 2840
- 2841
- 2842
- 2843
- 2844
- 2845
- 2846
- 2847
- 2848
- 2849
- 2850
- 2851
- 2852
- 2853
- 2854
- 2855
- 2856
- 2857
- 2858
- 2859
- 2860
- 2861
- 2862
- 2863
- 2864
- 2865
- 2866
- 2867
- 2868
- 2869
- 2870
- 2871
- 2872
- 2873
- 2874
- 2875
- 2876
- 2877
- 2878
- 2879
- 2880
- 2881
- 2882
- 2883
- 2884
- 2885
- 2886
- 2887
- 2888
- 2889
- 2890
- 2891
- 2892
- 2893
- 2894
- 2895
- 2896
- 2897
- 2898
- 2899
- 2900
- 2901
- 2902
- 2903
- 2904
- 2905
- 2906
- 2907
- 2908
- 2909
- 2910
- 2911
- 2912
- 2913
- 2914
- 2915
- 2916
- 2917
- 2918
- 2919
- 2920
- 2921
- 2922
- 2923
- 2924
- 2925
- 2926
- 2927
- 2928
- 2929
- 2930
- 2931
- 2932
- 2933
- 2934
- 2935
- 2936
- 2937
- 2938
- 2939
- 2940
- 2941
- 2942
- 2943
- 2944
- 2945
- 2946
- 2947
- 2948
- 2949
- 2950
- 2951
- 2952
- 2953
- 2954
- 2955
- 2956
- 2957
- 2958
- 2959
- 2960
- 2961
- 2962
- 2963
- 2964
- 2965
- 2966
- 2967
- 2968
- 2969
- 2970
- 2971
- 2972
- 2973
- 2974
- 2975
- 2976
- 2977
- 2978
- 2979
- 2980
- 2981
- 2982
- 2983
- 2984
- 2985
- 2986
- 2987
- 2988
- 2989
- 2990
- 2991
- 2992
- 2993
- 2994
- 2995
- 2996
- 2997
- 2998
- 2999
- 3000
- 3001
- 3002
- 3003
- 3004
- 3005
- 3006
- 3007
- 3008
- 3009
- 3010
- 3011
- 3012
- 3013
- 3014
- 3015
- 3016
- 3017
- 3018
- 3019
- 3020
- 3021
- 3022
- 3023
- 3024
- 3025
- 3026
- 3027
- 3028
- 3029
- 3030
- 3031
- 3032
- 3033
- 3034
- 3035
- 3036
- 3037
- 3038
- 3039
- 3040
- 3041
- 3042
- 3043
- 3044
- 3045
- 3046
- 3047
- 3048
- 3049
- 3050
- 3051
- 3052
- 3053
- 3054
- 3055
- 3056
- 3057
- 3058
- 3059
- 3060
- 3061
- 3062
- 3063
- 3064
- 3065
- 3066
- 3067
- 3068
- 3069
- 3070
- 3071
- 3072
- 3073
- 3074
- 3075
- 3076
- 3077
- 3078
- 3079
- 3080
- 3081
- 3082
- 3083
- 3084
- 3085
- 3086
- 3087
- 3088
- 3089
- 3090
- 3091
- 3092
- 3093
- 3094
- 3095
- 3096
- 3097
- 3098
- 3099
- 3100
- 3101
- 3102
- 3103
- 3104
- 3105
- 3106
- 3107
- 3108
- 3109
- 3110
- 3111
- 3112
- 3113
- 3114
- 3115
- 3116
- 3117
- 3118
- 3119
- 3120
- 3121
- 3122
- 3123
- 3124
- 3125
- 3126
- 3127
- 3128
- 3129
- 3130
- 3131
- 3132
- 3133
- 3134
- 3135
- 3136
- 3137
- 3138
- 3139
- 3140
- 3141
- 3142
- 3143
- 3144
- 3145
- 3146
- 3147
- 3148
- 3149
- 3150
- 3151
- 3152
- 3153
- 3154
- 3155
- 3156
- 3157
- 3158
- 3159
- 3160
- 3161
- 3162
- 3163
- 3164
- 3165
- 3166
- 3167
- 3168
- 3169
- 3170
- 3171
- 3172
- 3173
- 3174
- 3175
- 3176
- 3177
- 3178
- 3179
- 3180
- 3181
- 3182
- 3183
- 3184
- 3185
- 3186
- 3187
- 3188
- 3189
- 3190
- 3191
- 3192
- 3193
- 3194
- 3195
- 3196
- 3197
- 3198
- 3199
- 3200
- 3201
- 3202
- 3203
- 3204
- 3205
- 3206
- 3207
- 3208
- 3209
- 3210
- 3211
- 3212
- 3213
- 3214
- 3215
- 3216
- 3217
- 3218
- 3219
- 3220
- 3221
- 3222
- 3223
- 3224
- 3225
- 3226
- 3227
- 3228
- 3229
- 3230
- 3231
- 3232
- 3233
- 3234
- 3235
- 3236
- 3237
- 3238
- 3239
- 3240
- 3241
- 3242
- 3243
- 3244
- 3245
- 3246
- 3247
- 3248
- 3249
- 3250
- 3251
- 3252
- 3253
- 3254
- 3255
- 3256
- 3257
- 3258
- 3259
- 3260
- 3261
- 3262
- 3263
- 3264
- 3265
- 3266
- 3267
- 3268
- 3269
- 3270
- 3271
- 3272
- 3273
- 3274
- 3275
- 3276
- 3277
- 3278
- 3279
- 3280
- 3281
- 3282
- 3283
- 3284
- 3285
- 3286
- 3287
- 3288
- 3289
- 3290
- 3291
- 3292
- 3293
- 3294
- 3295
- 3296
- 3297
- 3298
- 3299
- 3300
- 3301
- 3302
- 3303
- 3304
- 3305
- 3306
- 3307
- 3308
- 3309
- 3310
- 3311
- 3312
- 3313
- 3314
- 3315
- 3316
- 3317
- 3318
- 3319
- 3320
- 3321
- 3322
- 3323
- 3324
- 3325
- 3326
- 3327
- 3328
- 3329
- 3330
- 3331
- 3332
- 3333
- 3333
推荐文章