快捷方式

Torchserve 用例

Torchserve 可用于不同的用例。为了方便用户,这里记录了一些用例。这些用例假设您已预先训练好模型,并且目标系统上安装了 torchservetorch-model-archiver。 这应该有助于您将开发环境模型迁移到生产/服务环境。

注意

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

  • 如果计划使用 docker,请确保满足以下先决条件 -

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

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

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

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

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

用例

服务 pytorch eager 模式模型

服务 pytorch scripted 模式模型

在 torchserve 模型动物园中服务现成的模型

安全模型服务

在 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 your_model_store_dir>

    • Docker - 这不适用。

  • 注册模型,即在上面步骤 1 中创建的 MAR 文件,如 curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,如 curl https://127.0.0.1:8081/models/<your_model_name>

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

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

预期结果

  • 能够部署任何 scripted 模型

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

部署 pytorch scripted 模式模型

先决条件

  • 假设您有一个 torchscripted 模型,如果没有,请按照此 示例 中的说明将您的 eager 模式模型保存为 scripted 模型。

部署模型的步骤

  • 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 your_model_store_dir>

    • Docker - 这不适用。

  • 注册模型,即在上面步骤 1 中创建的 MAR 文件,如 curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,如 curl https://127.0.0.1:8081/models/<your_model_name>

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

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

预期结果

  • 能够部署任何 scripted 模型

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

示例

  • ../examples/image_classifier

在 torchserve 模型动物园中服务现成的模型

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

部署模型的步骤

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

    • Docker - 这不适用。

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

  • 检查模型是否已成功注册,如 curl https://127.0.0.1:8081/models/<your_model_name>

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

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

预期结果

  • 能够部署模型动物园中提供的任何模型

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

示例

安全模型服务

此用例演示了用于安全模型服务的 torchserve 部署。 此处采用的示例使用 eager 模式模型,但您也可以部署 scripted 模型。

部署模型的步骤

  • 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 文件被复制到共享的卷/目录中

  • 使用 启用 SSL 中给出的参数选项 1 或 2 创建 config.properties 文件

  • 使用上面创建的属性文件启动 torchserve,如下所示 - torchserve --start --ncs --model-store <model_store 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://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=https://<s3_path>/<your model_name>.mar"

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

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

  • 使用以下 curl api 调用进行推理 - curl -k https://127.0.0.1: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 模式模型,但您也可以部署 eager 模型。

先决条件

  • 假设您有一个 torchscripted 模型,如果没有,请按照此 示例 中的说明将您的 eager 模式模型保存为 scripted 模型。

部署模型的步骤

  • 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.proerties 中添加 number_of_gpu 参数,并使用下一个说明中给出的第二个命令。 例如,number_of_gpu=2

  • 使用所有 GPU 启动 torchserve - torchserve --start --ncs --model-store <model_store your_model_store_dir>。 使用受限 GPU - torchserve --start --ncs --model-store <model_store 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 "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,如 curl https://127.0.0.1:8081/models/<your_model_name> 响应包括指示模型已加载到 GPU 上的标志。

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

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

预期结果

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

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

服务没有第三方依赖项的自定义模型

此用例演示了用于没有 python 依赖项(pytorch 和相关库除外)的自定义模型的 torchserve 部署。 此处采用的示例使用 scripted 模式模型,但您也可以部署 eager 模型。

先决条件

  • 假设您有一个 torchscripted 模型,如果没有,请按照此 示例 中的说明将您的 eager 模式模型保存为 scripted 模型。

部署模型的步骤

  • 创建 <your_custom_handler_py_file>

  • 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 your_model_store_dir>

    • Docker - 这不适用。

  • 注册模型,即在上面步骤 1 中创建的 MAR 文件,如 curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,如 curl https://127.0.0.1:8081/models/<your_model_name>

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

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

预期结果

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

示例

服务具有第三方依赖项的自定义模型

此用例演示了用于具有 python 依赖项(pytorch 和相关库除外)的自定义模型的 torchserve 部署。 此处采用的示例使用 scripted 模式模型,但您也可以部署 eager 模型。

先决条件

  • 假设您有一个 torchscripted 模型,如果没有,请按照此 示例 中的说明将您的 eager 模式模型保存为 scripted 模型。

部署模型的步骤

  • 创建 <your_custom_handler_py_file>,它使用第三方 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 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 "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"

  • 检查模型是否已成功注册,如 curl https://127.0.0.1:8081/models/<your_model_name>

  • 根据您期望的负载类型扩展 worker。 在上面的注册请求中,我们将 min-worker 保留为 1。 curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”

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

预期结果

  • 能够部署具有第三方 python 依赖项的自定义处理程序的任何模型

示例和参考

为 AB 测试服务模型

此用例演示了使用版本 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 "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your-model-name-X>.mar"

  • 现在您将能够按如下方式调用这些模型

    • 模型版本 1.0 curl https://127.0.0.1:8081/models/<your-model-name-X>/1.0curl https://127.0.0.1:8080/predictions/<your-model-name-X>/1.0 -F "[email protected]"

    • 模型版本 2.0 curl https://127.0.0.1:8081/models/<your-model-name-X>/2.0curl https://127.0.0.1:8080/predictions/<your-model-name-X>/2.0 -F "[email protected]"

预期结果

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

示例和参考

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源