⚠️ 注意:维护有限
此项目已不再积极维护。现有版本仍可使用,但已无计划的更新、错误修复、新功能或安全补丁。用户应注意,潜在漏洞可能不会得到解决。
Torchserve 使用案例¶
Torchserve 可用于不同的使用案例。为了方便用户,此处已记录了一些使用案例。这些使用案例假定您已在目标系统上安装预训练模型以及 torchserve
和 torch-model-archiver
。这应该有助于您将开发环境中的模型迁移到生产/服务环境。
注意事项
如果您尚未安装最新的 torchserve 和 torch-model-archiver,请按照 安装 说明完成安装。
如果计划使用 Docker,请确保已满足以下先决条件:
确保您的目标节点上已安装最新的 Docker 引擎。如果尚未安装,请使用此链接进行安装。
按照使用 Docker 安装的说明共享
model-store
目录并启动 torchserve。
以下使用案例步骤使用
curl
执行 torchserve REST API 调用。但是,您也可以使用 Chrome 插件postman
来完成此操作。请参考默认处理程序以了解默认处理程序。
请参考自定义处理程序以了解自定义处理程序。
使用案例¶
部署 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 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>
根据预期的负载类型扩展 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 模型。
部署模型(们)的步骤
为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.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"
预期结果
能够部署同一模型的多个版本
示例和参考