运行推理指标
此示例演示并解释了使用 RunInference 转换进行机器学习模型推理时可用的不同指标。该示例使用一个管道,该管道读取句子列表,对文本进行标记,并使用基于转换器的模型 distilbert-base-uncased-finetuned-sst-2-english
与 RunInference
将文本片段分类为两个类别。
当您使用 Dataflow 运行器运行管道时,可以使用 CPU 和 GPU 获得不同的 RunInference 指标。此示例演示了两种类型的指标。
下图显示了整个管道的文件结构。
runinference_metrics/
├── pipeline/
│ ├── __init__.py
│ ├── options.py
│ └── transformations.py
├── __init__.py
├── config.py
├── main.py
└── setup.py
pipeline/transformations.py
包含 beam.DoFn
代码以及用于管道的其他函数。
pipeline/options.py
包含用于配置 Dataflow 管道的管道选项。
config.py
定义了多次使用的变量,例如 Google Cloud PROJECT_ID
和 NUM_WORKERS
。
setup.py
定义了管道运行所需的包和要求。
main.py
包含管道代码以及用于运行管道的其他函数。
运行管道
安装所需的包。对于此示例,您需要访问 Google Cloud 项目,并且需要在 config.py
文件中配置 Google Cloud 变量,例如 PROJECT_ID
、REGION
等。要使用 GPU,请按照 GitHub 上 PyTorch GPU 最小管道 示例中的设置说明进行操作。
- 带有 CPU 的 Dataflow:
python main.py --mode cloud --device CPU
- 带有 GPU 的 Dataflow:
python main.py --mode cloud --device GPU
管道包括以下步骤
- 使用
beam.Create
创建要作为输入使用的文本列表。 - 对文本进行标记。
- 使用 RunInference 进行推理。
- 后处理 RunInference 的输出。
with beam.Pipeline(options=pipeline_options) as pipeline:
_ = (
pipeline
| "Create inputs" >> beam.Create(inputs)
| "Tokenize" >> beam.ParDo(Tokenize(cfg.TOKENIZER_NAME))
| "Inference" >>
RunInference(model_handler=KeyedModelHandler(model_handler))
| "Decode Predictions" >> beam.ParDo(PostProcessor()))
运行推理指标
如前所述,我们在 CPU 和 GPU 上使用 Dataflow 对 RunInference 的性能进行了基准测试。您可以在 Google Cloud 控制台中查看这些指标,或者可以使用以下代码行打印指标
下图显示了在 Google Cloud 控制台中使用 Dataflow 在 GPU 上时不同指标的快照
一些用于基准测试的常用指标是
num_inferences
:表示传递给run_inference()
的元素总数。inference_batch_latency_micro_secs_MEAN
:表示对所有示例批次执行推理所花费的平均时间,以微秒为单位。inference_request_batch_size_COUNT
:表示传递给run_inference()
的所有示例批次(从beam.BatchElements
创建)中的样本总数。inference_request_batch_byte_size_MEAN
:表示传递给run_inference()
的所有示例批次(从beam.BatchElements
创建)中所有样本的所有元素的平均大小。该指标以字节为单位。model_byte_size_MEAN
:表示加载和初始化模型所消耗的平均内存,以字节为单位。load_model_latency_milli_secs_MEAN
:表示加载和初始化模型所花费的平均时间,以毫秒为单位。
您还可以推导出其他相关指标,例如以下示例。
推理总时间
=num_inferences x inference_batch_latency_micro_secs_MEAN
最后更新时间:2024/10/31
您是否找到了您要查找的所有内容?
所有内容是否都有用且清晰?您想更改任何内容吗?请告诉我们!