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 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”使用以下
curlapi 调用进行推理 -curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 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”使用以下
curlapi 调用进行推理 -curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 HTTP 请求和响应。
预期结果
能够部署任何脚本化的模型
能够使用部署的模型进行推理
示例
../examples/image_classifier
提供现成模型在torchserve模型库¶
此用例演示了基于 torch hub 的 vision 模型(分类器、对象检测器、分割器)在 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”使用以下
curlapi 调用进行推理 -curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 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.propertiesDocker -
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”使用以下
curlapi 调用进行推理 -curl -k https://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 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-storeDocker - 确保在启动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.propertiesDocker - 为所有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和2docker run --rm -it --gpus '"device=1,2"' -p 8080:8080 -p 8081:8081 pytorch/torchserve:latest-gpuDocker - 详情请参阅 启动 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”使用以下
curlapi 调用进行推理 -curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 HTTP 请求和响应。
预期结果
能够将任何模型部署到GPU
能够使用部署的模型进行推理
使用自定义模型,无需第三方依赖¶
这个用例演示了使用torchserve部署自定义模型,除了依赖PyTorch和相关库外,没有其他Python依赖。 这里使用的示例是脚本模式模型,但你也可以部署 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 <**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”使用以下
curlapi 调用进行推理 -curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 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.propertiesDocker - `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”使用以下
curlapi 调用进行推理 -curl http://localhost:8080/predictions/<your_model_name> -T <your_input_file>. 你也可以使用PostmanGUI 工具进行 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"
预期结果
能够部署同一模型的不同版本
示例和参考