云机器学习引擎资源配置与定价解析
在与云机器学习引擎(Cloud ML Engine)交互时,了解其底层资源的配置和定价是非常重要的。这不仅有助于我们根据任务需求合理分配资源,还能控制成本。接下来,我们将详细探讨云机器学习引擎的资源配置和定价机制。
1. 配置底层资源
在运行训练和预测任务时,我们需要考虑使用的计算资源。下面从规模层级、机器类型和预测节点三个方面进行详细介绍。
1.1 规模层级(Scale Tier)
在 ML Engine 上创建训练作业时,可以指定规模层级,它是预定义的计算资源配置,能较好地处理训练工作负载。默认的规模层级适用于典型的机器学习作业。
规模层级的配置包含以下几个关键部分:
-
工作服务器(Worker Server)
:类似于虚拟机,负责执行训练模型所需的计算任务。
-
参数服务器(Parameter Server)
:当存在多个工作服务器时,参数服务器负责协调它们之间的模型计算,确保模型状态同步。
ML Engine 提供了以下几种预设的规模层级:
| 规模层级 | 描述 |
| — | — |
| BASIC | 单个工作服务器进行模型训练 |
| BASIC_GPU | 单个配备 GPU(NVIDIA Tesla K80)的工作服务器 |
| STANDARD_1 | 使用多个工作服务器,但只有一个参数服务器 |
| PREMIUM_1 | 使用多个工作服务器和多个参数服务器来协调共享模型状态 |
设置特定规模层级很简单,在提交训练作业时使用
--scale-tier
标志即可。如果未设置规模层级或其他配置,ML Engine 将使用 BASIC 层级。例如:
$ gcloud ml-engine jobs submit training censusbasic1 \
--stream-logs \
--runtime-version 1.2 \
--job-dir gs://your-ml-bucket-name-here/censusbasic1 \
--module-name trainer.task \
--package-path trainer/ \
--region us-central1 \
--scale-tier BASIC \
-- \
--train-files gs://your-ml-bucket-name-here/data/adult.data.csv \
--eval-files gs://your-ml-bucket-name-here/data/adult.test.csv \
--train-steps 10000 \
--eval-steps 1000
BASIC 和 BASIC_GPU 层级适合测试,但如果数据量较大或模型复杂,这两个层级可能不太适用。而 STANDARD_1 和 PREMIUM_1 层级则推荐用于实际生产工作负载,因为它们是分布式模型,能够处理大量数据。不过,STANDARD_1 层级只有一个参数服务器,在工作服务器数量较多时可能成为单点故障;PREMIUM_1 层级则支持多个参数服务器,可避免此瓶颈。
1.2 机器类型(Machine Type)
如果预设的规模层级不适合需求(特别是需要使用 GPU 时),ML Engine 允许自定义硬件配置。在配置参数服务器时,只有
standard
和
large_model
两种选择。参数服务器无法从更多 CPU 或硬件加速中受益,但如果模型较大,可能需要大量内存,
large_model
类型的内存是
standard
类型的四倍。
与 Compute Engine 的实例类型不同,ML Engine 的机器类型不指定具体的 CPU 或内存量,而是以参考容量为基础,较大的机器类型具有大致倍数的资源。例如,
complex_model_m
(中等)机器类型的 CPU 和内存约为
complex_model_s
(小型)机器类型的两倍。
以下是不同机器类型的概述:
| 机器类型 | 适用场景 | CPU | 内存 | GPU |
| — | — | — | — | — |
| standard | 所有服务器 | 1x | 4x | 无 |
| standard_gpu | 工作服务器 | 1x | 4x | 1x K80 |
| standard_p100 | 工作服务器 | 1x | 4x | 1x P100 |
| large_model | 参数服务器 | 2x | 16x | 无 |
| complex_model_s | 工作服务器 | 2x | 2x | 无 |
| complex_model_m | 工作服务器 | 4x | 4x | 无 |
| complex_model_m_gpu | 工作服务器 | 4x | 4x | 4x K80 |
| complex_model_m_p100 | 工作服务器 | 4x | 4x | 4x P100 |
| complex_model_l | 工作服务器 | 8x | 8x | 无 |
| complex_model_l_gpu | 工作服务器 | 8x | 8x | 8x K80 |
在训练作业中使用这些机器类型时,可以将资源配置信息放在配置文件(JSON 或 YAML 格式)中,然后在提交作业时引用该文件。例如,创建一个
job.yaml
文件:
trainingInput:
scaleTier: CUSTOM
masterType: standard
workerType: standard_gpu
parameterServerType: large_model
workerCount: 10
parameterServerCount: 2
然后提交新的训练作业:
$ gcloud ml-engine jobs submit training censuscustom1 \
--stream-logs \
--runtime-version 1.2 \
--job-dir gs://your-ml-bucket-name-here/customcensus1 \
--module-name trainer.task \
--package-path trainer/ \
--region us-central1 \
--config job.yaml \
-- \
--train-files gs://your-ml-bucket-name-here/data/adult.data.csv \
--eval-files gs://your-ml-bucket-name-here/data/adult.test.csv \
--train-steps 10000 \
--eval-steps 1000
1.3 预测节点(Prediction Nodes)
在进行预测任务时,工作负载相对统一,只使用一种类型的服务器:工作服务器。与训练作业不同,预测作业不能修改机器类型,只能考虑使用的服务器数量。预测节点的数量是一个限制值,而不是固定数量,因为 ML Engine 会根据作业的工作量自动进行缩放。
例如,小型预测作业可能一次使用一个节点就足够了,而大型的数百万条预测作业可能需要多个工作服务器才能更快完成。可以通过设置
--max-worker-count
标志来控制节点数量。例如:
$ gcloud ml-engine jobs submit prediction prediction2workers \
--model census --version v1 \
--data-format TEXT \
--region us-central1 \
--max-worker-count 2 \
--input-paths gs://your-ml-bucket-name-here/data.json \
--output-path gs://your-ml-bucket-name-here/prediction2workers-output
对于在线预测请求,ML Engine 会自动进行缩放,以最小化预测请求的延迟。在线预测适用于测试和稳定的预测请求流,但不能替代批量预测。
2. 理解定价
ML Engine 的定价分为训练和预测两部分,下面分别进行介绍。
2.1 训练成本
ML Engine 的定价基于每小时的计算单元成本,但与 Compute Engine 有一些重要区别。ML Engine 的定价最终归结为消耗的 ML 训练单元,每小时有相应的价格。价格可以按分钟计算,但存在 10 分钟的最低收费。
2.1.1 基于规模层级的定价
不同的规模层级每小时消耗的 ML 训练单元数量不同,且成本因地理位置而异,美国地区的成本略低于欧洲或亚洲。具体如下:
| 规模层级 | ML 训练单元 | 美国成本 | 欧洲/亚洲成本 |
| — | — | — | — |
| BASIC | 1 | $0.49 每小时 | $0.54 每小时 |
| BASIC_GPU | 3 | $1.47 每小时 | $1.62 每小时 |
| STANDARD_1 | 10 | $4.90 每小时 | $5.40 每小时 |
| PREMIUM_1 | 75 | $36.75 每小时 | $40.50 每小时 |
例如,使用默认的 BASIC 层级在
us-central1
区域运行训练作业,每小时费用为 $0.49。假设作业在 10 分钟内完成,根据最低收费标准,费用约为 8 美分(10 分钟 / 60 分钟 * $0.49 每小时)。
2.1.2 基于机器类型的定价
每种机器类型也有对应的 ML 训练单元成本,遵循相同的定价规则。例如,之前的自定义配置文件中,各种机器类型和服务器数量的组合消耗的 ML 训练单元总数为 37,在美国地区每小时的成本为 $18.13。假设作业在 10 分钟内完成,费用约为 3 美元(10 分钟 / 60 分钟 * $18.13 每小时)。
| 机器类型 | ML 训练单元 | 美国成本 | 欧洲/亚洲成本 |
|---|---|---|---|
| standard | 1 | $0.49 每小时 | $0.54 每小时 |
| standard_gpu | 3 | $1.47 每小时 | $1.62 每小时 |
| complex_model_m | 3 | $1.47 每小时 | $1.62 每小时 |
| complex_model_m_gpu | 12 | $5.88 每小时 | $6.48 每小时 |
可以通过命令行或云控制台查看作业消耗的 ML 训练单元数量。例如,使用以下命令查看作业详情:
$ gcloud ml-engine jobs describe census1
# ... More information here ...
trainingInput:
# ...
region: us-central1
runtimeVersion: '1.2'
scaleTier: BASIC
trainingOutput:
consumedMLUnits: 1.67
2.2 预测成本
预测任务主要由预测节点完成,与训练成本类似,预测成本也主要基于每个预测节点每小时的运行费用。预测节点的数量会根据工作量自动缩放,目前无法对其进行自定义配置。
综上所述,了解云机器学习引擎的资源配置和定价机制,可以帮助我们根据任务需求合理选择资源,控制成本,提高效率。
云机器学习引擎资源配置与定价解析
3. 资源配置与定价的实际应用案例
为了更好地理解云机器学习引擎的资源配置和定价机制,下面通过几个实际应用案例进行说明。
3.1 小型测试任务
假设我们要进行一个简单的机器学习模型测试,数据量较小,模型也相对简单。在这种情况下,我们可以选择 BASIC 规模层级。以下是具体的操作步骤:
1.
创建训练作业
:使用以下命令提交训练作业,指定 BASIC 规模层级。
$ gcloud ml-engine jobs submit training small_test \
--stream-logs \
--runtime-version 1.2 \
--job-dir gs://your-ml-bucket-name-here/small_test \
--module-name trainer.task \
--package-path trainer/ \
--region us-central1 \
--scale-tier BASIC \
-- \
--train-files gs://your-ml-bucket-name-here/small_data.csv \
--eval-files gs://your-ml-bucket-name-here/small_eval.csv \
--train-steps 1000 \
--eval-steps 100
- 计算成本 :由于使用了 BASIC 规模层级,在美国地区每小时的成本为 $0.49。假设作业在 10 分钟内完成,根据最低收费标准,费用约为 8 美分(10 分钟 / 60 分钟 * $0.49 每小时)。
3.2 中等规模数据训练任务
如果我们有中等规模的数据,并且希望利用 GPU 加速训练过程,可以选择 BASIC_GPU 规模层级。操作步骤如下:
1.
创建训练作业
:提交训练作业,指定 BASIC_GPU 规模层级。
$ gcloud ml-engine jobs submit training medium_test \
--stream-logs \
--runtime-version 1.2 \
--job-dir gs://your-ml-bucket-name-here/medium_test \
--module-name trainer.task \
--package-path trainer/ \
--region us-central1 \
--scale-tier BASIC_GPU \
-- \
--train-files gs://your-ml-bucket-name-here/medium_data.csv \
--eval-files gs://your-ml-bucket-name-here/medium_eval.csv \
--train-steps 5000 \
--eval-steps 500
- 计算成本 :BASIC_GPU 规模层级每小时消耗 3 个 ML 训练单元,在美国地区每小时的成本为 $1.47。假设作业运行了 30 分钟,费用为 30 分钟 / 60 分钟 * $1.47 每小时 = $0.735。
3.3 大型生产任务
对于大型生产任务,数据量巨大,模型复杂,我们可以选择 PREMIUM_1 规模层级或自定义机器类型。以下是自定义机器类型的操作步骤:
1.
创建配置文件
:创建一个
job.yaml
文件,自定义机器类型和服务器数量。
trainingInput:
scaleTier: CUSTOM
masterType: standard
workerType: standard_gpu
parameterServerType: large_model
workerCount: 20
parameterServerCount: 5
- 提交训练作业 :使用配置文件提交训练作业。
$ gcloud ml-engine jobs submit training large_production \
--stream-logs \
--runtime-version 1.2 \
--job-dir gs://your-ml-bucket-name-here/large_production \
--module-name trainer.task \
--package-path trainer/ \
--region us-central1 \
--config job.yaml \
-- \
--train-files gs://your-ml-bucket-name-here/large_data.csv \
--eval-files gs://your-ml-bucket-name-here/large_eval.csv \
--train-steps 10000 \
--eval-steps 1000
- 计算成本 :根据之前的机器类型成本表,计算出该配置消耗的 ML 训练单元总数,然后根据地理位置计算成本。假设该配置消耗了 100 个 ML 训练单元,在美国地区每小时的成本为 100 * $0.49 = $49。如果作业运行了 2 小时,费用为 $49 * 2 = $98。
4. 资源配置与定价的优化建议
为了在使用云机器学习引擎时实现资源的合理利用和成本的有效控制,以下是一些优化建议:
1.
根据任务规模选择合适的规模层级
:对于小型测试任务,使用 BASIC 或 BASIC_GPU 层级;对于大型生产任务,使用 STANDARD_1 或 PREMIUM_1 层级。
2.
合理使用自定义机器类型
:如果预设的规模层级无法满足需求,可以自定义机器类型。但要注意,自定义配置可能会增加成本,需要根据实际情况进行权衡。
3.
控制预测节点数量
:在进行预测任务时,根据任务的规模设置合理的
--max-worker-count
,避免资源浪费。
4.
监控作业成本
:定期查看作业消耗的 ML 训练单元数量,及时调整资源配置,以控制成本。
5. 总结
云机器学习引擎提供了丰富的资源配置选项和灵活的定价机制。通过了解规模层级、机器类型和预测节点的配置方法,以及训练和预测成本的计算方式,我们可以根据不同的任务需求合理选择资源,实现成本的有效控制。同时,通过实际应用案例和优化建议,我们可以更好地利用云机器学习引擎的功能,提高工作效率和经济效益。
以下是一个简单的 mermaid 流程图,展示了选择合适资源配置的流程:
graph LR
A[任务类型] --> B{数据规模和模型复杂度}
B -->|小型测试| C[BASIC 规模层级]
B -->|中等规模且需 GPU| D[BASIC_GPU 规模层级]
B -->|大型生产| E{是否需要自定义}
E -->|是| F[自定义机器类型]
E -->|否| G[STANDARD_1 或 PREMIUM_1 规模层级]
总之,合理配置云机器学习引擎的资源和控制成本是一个需要不断实践和优化的过程。希望通过本文的介绍,能够帮助大家更好地利用云机器学习引擎进行机器学习任务。
云机器学习资源配置与成本优化
超级会员免费看
38

被折叠的 条评论
为什么被折叠?



