Torchserve 使用案例¶
Torchserve 可用于不同的使用案例。为了方便用户使用,其中一些案例已在此处记录。这些使用案例假设您已预训练模型和 torchserve
,torch-model-archiver
已安装在您的目标系统上。这将帮助您将开发环境模型迁移到生产/服务环境。
注意
如果您尚未安装最新的 torchserve 和 torch-model-archiver,请按照安装说明完成安装
如果计划使用 docker,请确保以下先决条件已到位 -
确保您的目标节点上安装了最新的 docker 引擎。如果尚未安装,请使用此链接进行安装。
按照说明使用 docker 安装来共享
model-store
目录并启动 torchserve
以下使用案例步骤使用
curl
来执行 torchserve REST api 调用。但是,您也可以为此使用 chrome 插件postman
。请参考默认处理器以了解默认处理器。
请参考自定义处理器以了解自定义处理器。
使用案例¶
部署 PyTorch 渴望模式模型¶
部署模型的步骤
为Torch 渴望模式模型创建 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>
根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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 脚本模式模型¶
先决条件
假设您有一个 torchscripted 模型,如果没有,请按照此示例中的说明将您的渴望模式模型保存为脚本模型。
部署模型的步骤
为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 - 这不适用。
注册模型,即步骤 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>
根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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 Hub的 vision
模型(分类器、目标检测器、分割器)的部署,这些模型可在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>
根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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 部署。此处采用的示例使用渴望模式模型,但您也可以部署脚本模型。
部署模型的步骤
为Torch 渴望模式模型创建 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 的参数使用上面创建的属性文件启动 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>
根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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。这里使用的示例使用脚本模式模型,但您也可以部署 Eager 模型。
先决条件
假设您有一个 torch 脚本模型,如果没有,请按照此处的说明 示例 将您的 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.proerties 中添加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 和 2docker 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 上的标志。根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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
能够使用部署的模型进行推理
服务没有第三方依赖项的自定义模型¶
此用例演示了对没有 Python 依赖项(除了 PyTorch 和相关库)的自定义模型进行 torchserve 部署。这里使用的示例使用脚本模式模型,但您也可以部署 Eager 模型。
先决条件
假设您有一个 torch 脚本模型,如果没有,请按照此处的说明 示例 将您的 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 - 这不适用。
注册模型,即步骤 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>
根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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 依赖项(除了 PyTorch 和相关库)的自定义模型进行 torchserve 部署。这里使用的示例使用脚本模式模型,但您也可以部署 Eager 模型。
先决条件
假设您有一个 torchscripted 模型,如果没有,请按照此示例中的说明将您的渴望模式模型保存为脚本模型。
部署模型的步骤
创建 <your_custom_handler_py_file>,它使用第三方 Python 包(例如 fairseq)用于预训练的 NMT 模型
创建一个 requirements.txt 文件,其中包含
fairseq
Python 包名称的条目为 torch 脚本模型 创建一个包含 requirements.txt 的 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>
根据您预期的负载类型扩展工作程序。我们在上面的注册请求中将 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 使用初始工作程序注册这两个模型。如果需要,可以使用更新 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 "[email protected]"
模型版本 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 "[email protected]"
预期结果
能够部署同一模型的多个版本
示例和参考