Torchserve 用例¶
Torchserve 可用于不同的用例。为了方便用户,这里记录了一些用例。这些用例假设您已预先训练好模型,并且目标系统上安装了 torchserve
和 torch-model-archiver
。 这应该有助于您将开发环境模型迁移到生产/服务环境。
注意
如果您尚未安装最新的 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 或 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 hub 的 vision
模型(分类器、对象检测器、分割器),这些模型可在 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 和 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 "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 模型。
部署模型的步骤
为 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.0
或curl 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.0
或curl https://127.0.0.1:8080/predictions/<your-model-name-X>/2.0 -F "[email protected]"
预期结果
能够部署同一模型的多个版本
示例和参考