⚠️ 注意:维护有限
该项目不再积极维护。现有版本仍可使用,但不再计划进行更新、错误修复、新功能开发或安全补丁。用户应注意,漏洞可能不会得到解决。
常见问题解答¶
本文档目录。
通用¶
相关文档。
Torchserve API 是否遵循某些 REST API 标准?¶
Torchserve API 符合 OpenAPI 规范 3.0。
如何在生产环境中使用 Torchserve?¶
根据您的使用案例,您可以使用以下机制在生产环境中部署 Torchserve。
独立部署。请参考 TorchServe Docker 文档 或 TorchServe 文档 基于云的部署。请参考 TorchServe Kubernetes 文档 或 TorchServe CloudFormation 文档
Torchserve 与使用 Flask、Django 等 Web 框架的 Python Web 应用有什么区别?¶
Torchserve 的主要目的是通过 HTTP REST API 提供模型服务,Torchserve 不是一个 Flask 应用,它使用 netty 引擎处理 HTTP 请求。
是否有可用的示例模型?¶
Torchserve 内置了各种模型。请查看 Torchserve 模型库 获取所有可用模型列表。您还可以查看 examples 文件夹。
除了 Python,Torchserve 是否支持其他编程语言的模型?¶
目前只支持基于 Python 的模型。
Torchserve 相对于 AWS Multi-Model-Server 有哪些优势?¶
Torchserve 源自 Multi-Model-Server。但是,Torchserve 专为 PyTorch 模型进行了优化。它还包含 Snapshot 和模型版本控制等新功能。
如何在客户端解码推理响应中的国际语言?¶
默认情况下,如果推理响应是字符串,Torchserve 使用 utf-8 进行编码。因此客户端可以使用 utf-8 进行解码。
如果模型将国际语言字符串转换为字节,客户端需要使用模型指定的编解码机制,例如 https://github.com/pytorch/serve/blob/master/examples/nmt_transformer/model_handler_generalized.py 中的机制
性能¶
相关文档。
如何提高 TorchServe 在 CPU 上的性能?¶
CPU 性能很大程度上受启动器核心绑定的影响。我们建议在您的 config.properties
文件中设置以下属性
cpu_launcher_enable=true
cpu_launcher_args=--use_logical_core
有关提高 CPU 性能的更多背景信息可在 此博客文章 中找到。
部署与配置¶
相关文档。
我可以在默认的 8080 和 8081 端口以外的端口上运行 Torchserve API 吗?¶
是的,Torchserve API 端口可以通过 properties 文件或环境变量进行配置。有关更多详情,请参考 配置。
如何解决模型特定的 Python 依赖项?¶
您可以在使用 “–requirements-file/ -r” 标志创建 mar 文件时提供一个 requirements.txt
文件。此外,您可以使用 “–extra-files” 标志添加依赖文件。有关更多详情,请参考 配置。
我可以将 Torchserve 部署在 Kubernetes 中吗?¶
是的,您可以使用 Helm charts 将 Torchserve 部署在 Kubernetes 中。有关更多详情,请参考 Kubernetes 部署。
我可以将 Torchserve 与 AWS ELB 和 AWS ASG 一起部署吗?¶
是的,您可以将 Torchserve 部署在多节点 ASG AWS EC2 集群上。此处 提供了一个用于此类部署的 CloudFormation 模板。有关更多详情,请参考 Elastic LoadBalancer (ELB) 后面的多节点 EC2 部署。
如何备份和恢复 Torchserve 状态?¶
TorchServe 会在会话之间保留服务器运行时配置,以便遇到计划内或计划外服务停止的 TorchServe 实例能够在重启时恢复其状态。这些保存的运行时配置文件可用于备份和恢复。有关更多详情,请参考 TorchServe 模型快照。
如何从源代码构建 Torchserve 镜像?¶
Torchserve 有一个用于创建 docker 镜像的实用 脚本,该 docker 镜像可以基于硬件,兼容 CPU 或 GPU。Torchserve docker 镜像也可以是特定 CUDA 版本的。
所有这些 docker 镜像都可以使用 build_image.sh
并配合适当的选项来创建。
运行 ./build_image.sh --help
查看所有可用选项。
有关更多详情,请参考 从源代码创建 Torchserve Docker 镜像。
如何为特定分支或提交 ID 构建 Torchserve 镜像?¶
要为特定分支创建 Docker 镜像,请使用以下命令
./build_image.sh -b <branch_name>/<commit_id>
要为特定分支和特定标签创建 Docker 镜像,请使用以下命令
./build_image.sh -b <branch_name> -t <tagname:latest>
使用 Dockerfile 创建的镜像与使用 Dockerfile.dev 创建的镜像有什么区别?¶
使用 Dockerfile.dev 创建的镜像安装了从源代码构建的 Torchserve,而使用 Dockerfile 创建的镜像安装了从 PyPi 分发包获取的 Torchserve。
config.property 文件的路径顺序是什么?¶
TorchServe 按照 文档 中列出的顺序查找 config.property 文件。没有覆盖机制。
model_store, load_models, models 是什么?¶
model_store:TorchServe 启动时的必需参数。可以在 config.property 中定义,也可以通过 TorchServe 命令行选项 “–model-store” 覆盖。
load_models:TorchServe 启动时的可选参数。可以在 config.property 中定义,也可以通过 TorchServe 命令行选项 “–models” 覆盖。
models:在 config.property 中定义模型配置列表。模型的配置可以被 管理 API 覆盖。它不决定 TorchServe 启动时加载哪些模型。“models” 和 “load_models”(即 TorchServe 命令行选项 –models)之间没有直接关系。
¶
API¶
相关文档
除了 curl,我还可以使用什么工具向 Torchserve 发送请求?¶
您可以使用 Postman、Insomnia 等任何工具,甚至使用 Python 脚本来实现。在此处找到示例 Python 脚本:here。
如何向现有框架添加自定义 API?¶
您可以使用 Torchserve 中提供的 插件 SDK 添加自定义 API。有关更多详情,请参考 serving sdk 和 plugins。
如何在推理请求调用中向模型传递多张图片?¶
您可以在单个推理请求中以 data
对象中的键值对形式向自定义处理程序提供多个数据。有关更多详情,请参考 此问题。
处理程序¶
相关文档
如何返回模型的图像输出?¶
您需要编写一个自定义处理程序并修改后处理以返回图像。有关更多详情,请参考 自定义服务文档。
如何增强默认处理程序?¶
编写一个继承自默认处理程序的自定义处理程序,并只覆盖需要调整的方法。有关更多详情,请参考 自定义服务文档。
我总是需要编写自定义处理程序,还是可以使用默认的处理程序?¶
是的,您可以使用内置的默认处理程序,通过零代码部署您的模型。有关更多详情,请参考 默认处理程序。
是否可以部署 Hugging Face 模型?¶
是的,您可以使用自定义处理程序部署 Hugging Face 模型。例如,请参考 HuggingFace_Transformers。
模型打包器¶
相关文档
什么是 mar 文件?¶
mar 文件是一个包含所有模型工件且扩展名为 “.mar” 的 zip 文件。命令行工具 torch-model-archiver
用于创建 mar 文件。
如何使用 Torchserve docker 容器创建 mar 文件?¶
是的,您可以使用 Torchserve 容器创建您的 mar 文件。请按照此处 给出的步骤进行操作。
我可以在一个 mar 文件中添加多个序列化文件吗?¶
当前,torch-model-archiver
在创建 mar 文件时只允许使用 --serialized-file
参数提供一个序列化文件。但是,您可以使用 --extra-files
标志提供任意数量和任意类型的文件。mar 文件中提供的所有文件都位于 model_dir
位置,可以通过提供给处理程序入口点的上下文对象进行访问。
代码片段示例
properties = context.system_properties
model_dir = properties.get("model_dir")
有关更多详情,请参考 Torch 模型打包器 CLI。相关问题:[#633]
我可以使用 s3 预签名 v4 URL 下载和注册模型吗?¶
您可以使用 s3 v2 和 v4 签名 URL。注意:对于 v4 类型,请在 curl 命令中将模型 URL 中的 &
字符替换为其 URL 编码字符,即 %26
。
相关问题:[#669]
我可以在 s3 上托管模型吗?¶
mar 文件可以在本地使用,也可以通过 http 公开访问。以 s3:// 开头的 S3 URI 不起作用,但同一个文件可以设置为公开,并在 s3 控制台或 aws cli 中获取以 https:// 开头的公开对象 URL。
如何在 SageMaker 上设置模型的批量大小?TorchServe 性能调优的关键参数。¶
为什么我的模型初始化如此缓慢?¶
模型初始化缓慢有几个原因
torch.load()
开销 - 这是我们无法改进的,对于大型模型来说会更显著CUDA 上下文启动开销 - 这是我们无法控制的
install_py_dep_per_model=true 用于本地开发或 sagemaker 部署,在其他生产环境中,您应该预先安装依赖项
模型打包器在压缩和解压缩模型时存在开销,默认启用压缩是因为 Torchserve 历史上源于 sagemaker 的需求,涉及加载和卸载存储在云存储桶中的大量模型。但对于部署规模较小的用户,选择
torch-model-archiver --no-archive
是个不错的选择