目录

Torchserve 使用案例

Torchserve 可以用于不同的使用案例。为了使它更方便用户,其中一些使用案例已经在这里进行了文档化。 这些使用案例假设您已预训练模型(s)和 torchserve, torch-model-archiver 已安装在目标系统上。 这应该帮助您将开发环境中的模型迁移到生产/服务环境。

NOTES

  • 如果您尚未安装最新的torchserve和torch-model-archiver,请遵循安装说明并完成安装

  • 如果计划使用 Docker,请确保以下前提条件已就绪:

    • 确保您的目标节点上安装了最新版本的 Docker 引擎。如果没有,请使用 链接进行安装。

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

  • 以下用例步骤使用 curl 执行 torchserve REST api 调用。但是,您也可以使用 chrome 插件 postman 进行此操作。

  • 请参考default_handler了解默认处理器。

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

使用案例

启用 PyTorch 慵懒模式模型

使用 PyTorch 脚本模式训练模型

在 PyTorch 模型库中提供现成的模型

安全模型服务

在GPU上运行模型

使用自定义模型,无需第三方依赖

使用第三方依赖提供自定义模型

为A/B测试提供模型

部署PyTorch eager模式模型

部署模型的步骤

  • 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 - 这不适用。

  • 注册模型,即在上一步骤中创建的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>

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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 请求和响应。

预期结果

  • 能够部署任何脚本化的模型

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

部署PyTorch脚本模式模型

先决条件

  • 假设你已经有一个torchscript模型,如果没有,请按照这个示例中的说明将你的eager模式模型保存为脚本模型。

部署模型的步骤

  • torch 脚本模型 创建 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 - 这不适用。

  • 注册模型,即在上一步骤中创建的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>

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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 请求和响应。

预期结果

  • 能够部署任何脚本化的模型

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

示例

  • ../examples/image_classifier

提供现成模型在torchserve模型库

此用例演示了基于 torch hubvision 模型(分类器、对象检测器、分割器)在 torchserve Model Zoo上的部署。 使用这些步骤也可以部署公开托管的模型。

部署模型的步骤

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

    • Docker - 这不适用。

  • 注册模型,即在上一步骤中创建的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>

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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 请求和响应。

预期结果

  • 能够部署Model Zoo中可用的任何模型

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

示例

安全模型服务

这个用例演示了使用torchserve部署安全模型服务。 这里使用的示例是使用 eager 模式模型,但你也可以部署脚本化的模型。

部署模型的步骤

  • 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 个文件,使用选项 1 或 2 中给出的参数,或在 启用 SSL 中提供的参数

  • 开始使用上面创建的属性文件启动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

  • 注册模型,即在上一步骤中创建的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>

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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 等,如果您有相应的密钥。

预期结果

  • 能够部署torchserve并访问HTTP API

Examples/Reference

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

在GPU上运行模型

这个用例演示了在GPU上部署torchserve。 这里使用的示例使用脚本模式模型,但您也可以部署 eager 模型。

先决条件

  • 假设你已经有一个torchscript模型,如果没有,请按照这个示例中的说明将你的eager模式模型保存为脚本模型。

部署模型的步骤

  • torch 脚本模型 创建 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 容器

  • 注册模型,即在上一步骤中创建的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的标志。

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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依赖。 这里使用的示例是脚本模式模型,但你也可以部署 eager 模型。

先决条件

  • 假设你已经有一个torchscript模型,如果没有,请按照这个示例中的说明将你的eager模式模型保存为脚本模型。

部署模型的步骤

  • 创建 <your_custom_handler_py_file>

  • torch 脚本模型 创建 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 - 这不适用。

  • 注册模型,即在上一步骤中创建的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>

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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部署自定义模型,该模型依赖于Python之外的库,除了PyTorch和相关库。 这里使用的示例是脚本模式模型,但你也可以部署 eager 模型。

先决条件

  • 假设你已经有一个torchscript模型,如果没有,请按照这个示例中的说明将你的eager模式模型保存为脚本模型。

部署模型的步骤

  • 创建 <your_custom_handler_py_file>,该文件使用第三方Python包,例如 fairseq,用于预训练的NMT模型

  • 创建一个包含 fairseq 个 Python 包名称的 requirements.txt 文件

  • torch 脚本模型 创建 MAR 文件,并附带 requirements.txt

    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 包

  • 开始使用以下命令启动torchserve,配置文件为config.properties - 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 <本地目录>/model-store:/home/model-server/model-store <你的Docker镜像> torchserve --model-store=/tmp/models --ts-config <你的路径>/config.properties`

  • 注册模型,即在上一步骤中创建的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>

  • 根据您预期的负载类型调整工作者数量。在注册请求中已将 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依赖项的模型

示例和参考

为AB测试提供模型

这个用例演示了使用版本API为同一模型提供两个或多个版本的服务。这是上述任何用例的扩展。

先决条件

  • 你已经按照上述任何一种方法操作,并且有一个可用的torchserve设置以及torch-model-archiver已安装。

部署模型的步骤

  • 创建一个模型(例如,mar文件)版本1.0或按要求。按照上述步骤创建模型文件。 例如:torch-model-archiver –model-name - 版本 1.0模型文件 model.py - 保存的文件.pth –extra-files index_to_name.json –handler.py

  • 创建另一个模型(例如,mar文件)版本2.0或按需求。例如:torch-model-archiver –model-name - 版本 2.0模型文件 model.py - 保存的文件.pth –extra-files index_to_name.json –handler.py

  • 将这两个模型注册到初始工作者。如果您愿意,可以使用更新API增加工作者。 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.0 或者 curl 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.0 或者 curl http://localhost:8080/predictions/<your-model-name-X>/2.0 -F "data=@kitten.jpg"

预期结果

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

示例和参考

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源