• 文档 >
  • Torchserve 使用案例
快捷方式

⚠️ 注意:维护有限

此项目已不再积极维护。现有版本仍可使用,但已无计划的更新、错误修复、新功能或安全补丁。用户应注意,潜在漏洞可能不会得到解决。

Torchserve 使用案例

Torchserve 可用于不同的使用案例。为了方便用户,此处已记录了一些使用案例。这些使用案例假定您已在目标系统上安装预训练模型以及 torchservetorch-model-archiver。这应该有助于您将开发环境中的模型迁移到生产/服务环境。

注意事项

  • 如果您尚未安装最新的 torchserve 和 torch-model-archiver,请按照 安装 说明完成安装。

  • 如果计划使用 Docker,请确保已满足以下先决条件:

    • 确保您的目标节点上已安装最新的 Docker 引擎。如果尚未安装,请使用链接进行安装。

    • 按照使用 Docker 安装的说明共享 model-store 目录并启动 torchserve。

  • 以下使用案例步骤使用 curl 执行 torchserve REST API 调用。但是,您也可以使用 Chrome 插件 postman 来完成此操作。

  • 请参考默认处理程序以了解默认处理程序。

  • 请参考自定义处理程序以了解自定义处理程序。

使用案例

服务 PyTorch Eager Mode 模型

服务 PyTorch Scripted Mode 模型

服务 Torchserve 模型库中的现成模型

安全的模型服务

在 GPU 上服务模型

服务不依赖第三方库的自定义模型

服务依赖第三方库的自定义模型

服务用于 A/B 测试的模型

部署 PyTorch Eager Mode 模型

部署模型(们)的步骤

  • Torch Eager 模型创建 MAR 文件

    torch-model-archiver --model-name <your_model_name> --version 1.0 --model-file <your_model_file>.py --serialized-file <your_model_name>.pth --handler <default_handler> --extra-files ./index_to_name.json
    mkdir model_store
    mv <your_model_name>.mar model_store/
    
    • Docker - 可以直接在 Docker 中构建 MAR 文件,请参考此处了解详情。

  • 将 MAR 文件放在一个新目录中,命名为 model-store(这可以是任意名称)。

    • Docker - 确保在启动 torchserve Docker 镜像时,MAR 文件被复制到共享卷/目录中。

  • 使用以下命令启动 torchserve - torchserve --start --ncs --model-store <model_store or your_model_store_dir>

    • Docker - 此项不适用。

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl http://localhost:8081/models/<your_model_name>

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

预期结果

  • 能够部署任何 Scripted Mode 模型

  • 能够使用已部署的模型执行推理

部署 PyTorch Scripted Mode 模型

先决条件

  • 假设您有一个 TorchScripted 模型,如果不是,请按照此示例中的说明将您的 Eager Mode 模型保存为 Scripted Mode 模型。

部署模型(们)的步骤

  • Torch Scripted 模型创建 MAR 文件

    torch-model-archiver --model-name <your_model_name> --version 1.0  --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <default_handler>
    mkdir model-store
    mv <your_model_name>.mar model-store/
    
    • Docker - 可以直接在 Docker 中构建 MAR 文件,请参考此处了解详情。

  • 将 MAR 文件放在一个新目录中,命名为 model-store(这可以是任意名称)。

    • Docker - 确保在启动 torchserve Docker 镜像时,MAR 文件被复制到共享卷/目录中。

  • 使用以下命令启动 torchserve - torchserve --start --ncs --model-store <model_store or your_model_store_dir>

    • Docker - 此项不适用。

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl http://localhost:8081/models/<your_model_name>

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

预期结果

  • 能够部署任何 Scripted Mode 模型

  • 能够使用已部署的模型执行推理

示例

  • ../examples/image_classifier

服务 Torchserve 模型库中的现成模型

此使用案例演示了如何部署基于 Torch Hubvision 模型(分类器、对象检测器、分割器),这些模型可在Torchserve 模型库中找到。您也可以使用这些步骤部署 公开托管 的模型。

部署模型(们)的步骤

  • 使用以下命令启动 torchserve - torchserve --start --ncs --model-store <model_store or your_model_store_dir>

    • Docker - 此项不适用。

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=https://<public_url>/<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl http://localhost:8081/models/<your_model_name>

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

预期结果

  • 能够部署模型库中的任何模型

  • 能够使用已部署的模型执行推理

示例

安全的模型服务

此使用案例演示了如何部署 torchserve 以实现安全模型服务。此处采用的示例使用了 Eager Mode 模型,但您也可以部署 Scripted Mode 模型。

部署模型(们)的步骤

  • Torch Eager 模型创建 MAR 文件

    torch-model-archiver --model-name <your_model_name> --version 1.0 --model-file <your_model_file>.py --serialized-file <your_model_name>.pth --handler <default_handler> --extra-files ./index_to_name.json
    mkdir model_store
    mv <your_model_name>.mar model_store/
    
    • Docker - 可以直接在 Docker 中构建 MAR 文件,请参考此处了解详情。

  • 将 MAR 文件放在一个新目录中,命名为 model-store(这可以是任意名称)。

    • Docker - 确保在启动 torchserve Docker 镜像时,MAR 文件被复制到共享卷/目录中。

  • 创建 config.properties 文件,其中包含启用 SSL 中提供的选项 1 或选项 2 参数。

  • 使用上面创建的 properties 文件启动 torchserve,命令如下:torchserve --start --ncs --model-store <model_store or your_model_store_dir> --ts-config <your_path>/config.properties

    • Docker - docker run --rm -p 127.0.0.1:8443:8433 -p 127.0.0.1:8444:8444 -p 127.0.0.1:8445:8445 -v <local_dir>/model-store:/home/model-server/model-store <your_docker_image> torchserve --model-store=/tmp/models --ts-config <your_path>/config.properties

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -k -v -X POST "https://localhost:8081/models?initial_workers=1&synchronous=true&url=https://<s3_path>/<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl -k https://localhost:8081/models/<your_model_name>

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl -k https://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

    注意 curl 命令中使用了 https 和 -k 选项。如果您有所需的密钥,可以使用其他选项(如 -key 等)替代 -k。

预期结果

  • 能够部署 torchserve 并通过 HTTPS 访问 API

示例/参考

  • https://github.com/pytorch/serve/blob/master/docs/configuration.md#enable-ssl

在 GPU 上服务模型

此使用案例演示了如何在 GPU 上部署 torchserve。此处采用的示例使用了 Scripted Mode 模型,但您也可以部署 Eager Mode 模型。

先决条件

  • 假设您有一个 TorchScripted 模型,如果不是,请按照此示例中的说明将您的 Eager Mode 模型保存为 Scripted Mode 模型。

部署模型(们)的步骤

  • Torch Scripted 模型创建 MAR 文件

    torch-model-archiver --model-name <your_model_name> --version 1.0  --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <default_handler>
    mkdir model-store
    mv <your_model_name>.mar model-store/
    
    • Docker - 可以直接在 Docker 中构建 MAR 文件,请参考此处了解详情。

  • 将 MAR 文件移动到一个新目录中,命名为 model-store

    • Docker - 确保在启动 torchserve Docker 镜像时,MAR 文件被复制到共享卷/目录中。

  • 以下说明中的 torchserve 启动命令将自动检测 GPU 并用于加载/服务模型。如果您想限制 GPU 使用,可以使用 nvidia-smi 确定 GPU 数量及对应的 ID。获取 GPU 详细信息后,您可以在 config.properties 中添加 number_of_gpu 参数,并使用下一条指令中给出的第二条命令。例如:number_of_gpu=2

  • 使用所有 GPU 启动 torchserve - torchserve --start --ncs --model-store <model_store or your_model_store_dir>。限制 GPU 使用时 - torchserve --start --ncs --model-store <model_store or your_model_store_dir> --ts-config <your_path>/config.properties

    • Docker - 使用所有 GPU 时 docker run --rm -it --gpus all -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 torchserve:gpu-latest。使用 GPU 1 和 2 时 docker run --rm -it --gpus '"device=1,2"' -p 8080:8080 -p 8081:8081 pytorch/torchserve:latest-gpu

    • Docker - 详情请参考启动 GPU 容器

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl http://localhost:8081/models/<your_model_name>。响应将包含指示模型已加载到 GPU 上的标志。

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

预期结果

  • 能够将任何模型部署到 GPU

  • 能够使用已部署的模型执行推理

服务不依赖第三方库的自定义模型

此使用案例演示了如何部署 torchserve 来服务不依赖除 PyTorch 及相关库之外的第三方 Python 库的自定义模型。此处采用的示例使用了 Scripted Mode 模型,但您也可以部署 Eager Mode 模型。

先决条件

  • 假设您有一个 TorchScripted 模型,如果不是,请按照此示例中的说明将您的 Eager Mode 模型保存为 Scripted Mode 模型。

部署模型(们)的步骤

  • 创建<您的_自定义_handler_py_文件>

  • Torch Scripted 模型创建 MAR 文件

    torch-model-archiver --model-name <your_model_name> --version 1.0  --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <**path/to/your_custom_handler_py_file**>
    mkdir model-store
    mv <your_model_name>.mar model-store/
    
    • Docker - 可以直接在 Docker 中构建 MAR 文件,请参考此处了解详情。

  • 将 MAR 文件放在一个新目录中,命名为 model-store(这可以是任意名称)。

    • Docker - 确保在启动 torchserve Docker 镜像时,MAR 文件被复制到共享卷/目录中。

  • 使用以下命令启动 torchserve - torchserve --start --ncs --model-store <model_store or your_model_store_dir>

    • Docker - 此项不适用。

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl http://localhost:8081/models/<your_model_name>

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

预期结果

  • 能够部署任何带有自定义处理程序的模型

示例

服务依赖第三方库的自定义模型

此使用案例演示了如何部署 torchserve 来服务依赖除 PyTorch 及相关库之外的第三方 Python 库的自定义模型。此处采用的示例使用了 Scripted Mode 模型,但您也可以部署 Eager Mode 模型。

先决条件

  • 假设您有一个 TorchScripted 模型,如果不是,请按照此示例中的说明将您的 Eager Mode 模型保存为 Scripted Mode 模型。

部署模型(们)的步骤

  • 创建<您的_自定义_handler_py_文件>,该文件使用第三方 Python 包,例如用于预训练 NMT 模型的 fairseq

  • 创建一个 requirements.txt 文件,并在其中添加 fairseq Python 包名。

  • 为带有 requirements.txt 的Torch Scripted 模型创建 MAR 文件。

    torch-model-archiver --model-name <your_model_name> --version 1.0  --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <**path/to/your_custom_handler_py_file**> --requirements-file <your_requirements_txt>
    mkdir model-store
    mv <your_model_name>.mar model-store/
    
    • Docker - 可以直接在 Docker 中构建 MAR 文件,请参考此处了解详情。

  • 将 MAR 文件放在一个新目录中,命名为 model-store(这可以是任意名称)。

    • Docker - 确保在启动 torchserve Docker 镜像时,MAR 文件被复制到共享卷/目录中。

  • 将以下参数添加到 config.properties 文件中 - install_py_dep_per_model=true。详情请参考允许模型特定的自定义 Python 包

  • 使用 config.properties 文件启动 torchserve,命令如下:torchserve --start --ncs --model-store <model_store or your_model_store_dir> --ts-config <your_path>/config.properties

    • Docker - docker run –rm -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 -v <local_dir>/model-store:/home/model-server/model-store <your_docker_image> torchserve –model-store=/tmp/models –ts-config <your_path>/config.properties

  • 注册模型,即上面第 1 步创建的 MAR 文件,命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,命令如下:curl http://localhost:8081/models/<your_model_name>

  • 根据预期的负载类型扩展 worker。上面注册请求中我们将 min-worker 设置为 1。命令如下:curl -v -X PUT "http://localhost:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl API 调用执行推理:curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用 Postman GUI 工具进行 HTTP 请求和响应。

预期结果

  • 能够部署带有依赖第三方 Python 库的自定义处理程序的模型

示例和参考

服务用于 A/B 测试的模型

此使用案例演示了如何使用版本 API 服务同一模型的两个或多个版本。它是上述任何使用案例的扩展。

先决条件

  • 您已按照上述任一流程操作,并且 torchserve 已正确设置,同时安装了 torch-model-archiver。

部署模型(们)的步骤

  • 创建一个版本为 1.0 或根据需求的模型(即 MAR 文件)。按照上面给出的步骤创建模型文件,例如 torch-model-archiver –model-name –version 1.0 –model-file model.py –serialized-file.pth –extra-files index_to_name.json –handler.py

  • 创建另一个版本为 2.0 或根据需求的模型(即 MAR 文件),例如 torch-model-archiver –model-name –version 2.0 –model-file model.py –serialized-file.pth –extra-files index_to_name.json –handler.py

  • 使用初始 worker 注册这两个模型。如果需要,可以使用更新 API 增加 worker 数量。命令如下:curl -v -X POST "http://localhost:8081/models?initial_workers=1&synchronous=true&url=<your-model-name-X>.mar"

  • 现在您可以使用以下命令调用这些模型:

    • 模型版本 1.0:curl http://localhost:8081/models/<your-model-name-X>/1.0curl http://localhost:8080/predictions/<your-model-name-X>/1.0 -F "data=@kitten.jpg"

    • 模型版本 2.0:curl http://localhost:8081/models/<your-model-name-X>/2.0curl http://localhost:8080/predictions/<your-model-name-X>/2.0 -F "data=@kitten.jpg"

预期结果

  • 能够部署同一模型的多个版本

示例和参考

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得问题解答

查看资源