快捷方式

高级配置

TorchServe 的默认设置应该足以满足大多数用例。但是,如果您想自定义 TorchServe,则可以使用本主题中描述的配置选项。

有三种方法可以配置 TorchServe。按优先级排序,它们是

  1. 环境变量

  2. 命令行参数

  3. 配置文件

例如,环境变量的值会覆盖命令行参数和配置文件中的属性。命令行参数的值会覆盖配置文件中的值。

环境变量

您可以通过设置以下环境变量来更改 TorchServe 的行为

  • JAVA_HOME

  • PYTHONPATH

  • TS_CONFIG_FILE

  • LOG_LOCATION

  • METRICS_LOCATION

**注意:**环境变量的优先级高于命令行或 config.properties。环境变量的值会覆盖其他属性值。

命令行参数

当您调用 torchserve 时,使用以下命令行参数来自定义 TorchServe 的行为

  • **–ts-config** 如果未设置 TS_CONFIG_FILE 环境变量,则 TorchServe 会加载指定的配置文件

  • **–model-store** 覆盖 config.properties 文件中的 model_store 属性

  • **–models** 覆盖 config.properties 文件中的 load_models 属性

  • **–log-config** 覆盖默认的 log4j2.xml

  • **–foreground** 在前台运行 TorchServe。如果禁用此选项,TorchServe 将在后台运行

有关 torchserve 命令行选项的更多详细信息,请参阅 使用 TorchServe 提供模型.

config.properties 文件

TorchServe 使用 config.properties 文件来存储配置。TorchServe 按优先级顺序使用以下方法来定位此 config.properties 文件

  1. 如果设置了 TS_CONFIG_FILE 环境变量,则 TorchServe 会从环境变量指定的路径加载配置。

  2. 如果将 --ts-config 参数传递给 torchserve,则 TorchServe 会从参数指定的路径加载配置。

  3. 如果在您调用 torchserve 的文件夹中存在 config.properties,则 TorchServe 会从当前工作目录加载 config.properties 文件。

  4. 如果没有指定上述任何内容,则 TorchServe 会加载具有默认值的内置配置。

自定义 JVM 选项

要控制 TorchServe 前端内存占用,请在 config.properties 文件中配置 **vmargs** 属性

  • 默认:N/A,使用 JVM 默认选项

调整 JVM 选项以满足您的内存需求。

在启动时加载模型

您可以通过设置 model_storeload_models 属性来配置 TorchServe 在启动期间加载模型。以下值有效

  • load_models

    • standalone: 默认:N/A,启动时不会加载任何模型。

    • all: 加载 model_store 中存在的所有模型。

    • model1.mar, model2.mar: 加载 model_store 中指定的 MAR 文件中的模型。

    • model1=model1.mar, model2=model2.mar: 加载 model_store 中具有指定名称和 MAR 文件的模型。

  • model_store

    • standalone: 默认:N/A,从本地磁盘加载模型被禁用。

    • pathname: 模型存储位置由 pathname 的值指定。

**注意:**如果指定了命令行参数,则会覆盖 model_storeload_models 属性。

配置 TorchServe 监听地址和端口

TorchServe 本身不支持身份验证。为了防止未经授权的访问,TorchServe 默认情况下只允许 localhost 访问。推理 API 监听端口 8080。管理 API 监听端口 8081。两者都期望 HTTP 请求。这些是默认端口。请参阅 启用 SSL 以配置 HTTPS。

  • inference_address: 推理 API 绑定地址。默认:http://127.0.0.1:8080

  • management_address: 管理 API 绑定地址。默认:http://127.0.0.1:8081

  • metrics_address: 指标 API 绑定地址。默认:http://127.0.0.1:8082

  • 要在特定 IP 地址上的模型上运行预测,请指定 IP 地址和端口。

# bind inference API to localhost with SSL enabled
inference_address=https://127.0.0.1:8443
# bind inference API to private network interfaces with SSL enabled
inference_address=https://172.16.1.10:8080

配置 TorchServe gRPC 监听地址、端口和最大连接年龄

推理 gRPC API 默认情况下在 localhost 上的端口 7070 上监听,管理 gRPC API 在 localhost 上的端口 7071 上监听。

要配置不同的地址,请使用以下属性

  • grpc_inference_address: 推理 gRPC API IP 地址。默认:127.0.0.1

  • grpc_management_address: 管理 gRPC API IP 地址。默认:127.0.0.1

要配置不同的端口,请使用以下属性

  • grpc_inference_port: 推理 gRPC API 绑定端口。默认:7070

  • grpc_management_port: 管理 gRPC API 绑定端口。默认:7071

要配置 最大连接年龄(毫秒)

  • grpc_inference_max_connection_age_ms: 推理 gRPC 最大连接年龄。默认:无限

  • grpc_management_max_connection_age_ms: 管理 gRPC 最大连接年龄。默认:无限

要配置 最大连接年龄宽限时间(毫秒)

  • grpc_inference_max_connection_age_grace_ms: 推理 gRPC 最大连接年龄宽限时间。默认:无限

  • grpc_management_max_connection_age_grace_ms: 管理 gRPC 最大连接年龄宽限期。默认值:无限

启用 SSL

要启用 HTTPs,可以将 inference_addressmanagement_addressmetrics_address 协议从 http 更改为 https。例如:inference_address=https://127.0.0.1。默认端口为 443,但可以设置 TorchServe 监听任何端口以接受 https 请求。例如,要在端口 8443 上接收 https 流量,可以使用:inference_address=https://127.0.0.1:8443

还必须提供证书和私钥来启用 SSL。TorchServe 支持两种配置 SSL 的方式

  1. 使用密钥库

  • keystore: 密钥库文件位置。如果密钥库中存在多个私钥条目,则将使用第一个条目。

  • keystore_pass: 密钥库密码。密码(如果适用)必须与密钥库密码相同。

  • keystore_type: 密钥库的类型。默认值:PKCS12。

  1. 使用私钥/证书文件

  • private_key_file: 私钥文件位置。支持 PKCS8 和 OpenSSL 私钥。

  • certificate_file: X509 证书链文件位置。

示例

选项 1: 使用密钥库;使用 Java 的 keytool 生成密钥库。注意 storepass 参数需要您创建自己的密码。

keytool -genkey -keyalg RSA -alias ts -keystore keystore.p12 -storepass changeit -storetype PKCS12 -validity 3600 -keysize 2048 -dname "CN=www.MY_TS.com, OU=Cloud Service, O=model server, L=Palo Alto, ST=California, C=US"

在 config.properties 中配置以下属性

inference_address=https://127.0.0.1:8443
management_address=https://127.0.0.1:8444
metrics_address=https://127.0.0.1:8445
keystore=keystore.p12
keystore_pass=changeit
keystore_type=PKCS12

选项 2: 使用私钥/证书文件;使用 OpenSSL 生成自签名证书和密钥

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

在 config.properties 中配置以下属性

inference_address=https://127.0.0.1:8443
management_address=https://127.0.0.1:8444
metrics_address=https://127.0.0.1:8445
private_key_file=mykey.key
certificate_file=mycert.pem

配置跨域资源共享 (CORS)

CORS 是一种机制,它使用额外的 HTTP 标头来告诉浏览器允许一个源(域)上的 Web 应用程序访问来自不同源上的服务器的选定资源。

CORS 默认情况下处于禁用状态。在 config.properties 文件中配置以下属性以启用 CORS

# cors_allowed_origin is required to enable CORS, use '*' or your domain name
cors_allowed_origin=https://yourdomain.com
# required if you want to use preflight request
cors_allowed_methods=GET, POST, PUT, OPTIONS
# required if the request has an Access-Control-Request-Headers header
cors_allowed_headers=X-Custom-Header

首选直接缓冲区

配置参数 prefer_direct_buffer 控制模型服务器是否将使用 -XX:MaxDirectMemorySize 指定的直接内存。此参数仅适用于模型服务器,不会影响其他包对直接内存缓冲区的使用。默认值:false

prefer_direct_buffer=true

允许模型特定的自定义 Python 包。

自定义模型/处理程序可能依赖于不同的 Python 包,这些包不是作为 TorchServe 设置的一部分默认安装的。用户可以提供一个 requirements.txt 文件,其中包含由 TorchServe 安装的所需 Python 包列表,以实现无缝模型服务。配置参数 install_py_dep_per_model 控制模型服务器是否使用与模型存档一起提供的 requirements 文件安装 Python 包。默认值:false

install_py_dep_per_model=true

用户还可以使用 --extra-files 标志在创建模型存档时以 zip 或 tar.gz 格式提供自定义 Python 包,并在 requirements 文件中添加文件名的条目。

限制后端工作程序访问环境变量

环境变量可能包含敏感信息,例如 AWS 凭据。后端工作程序执行任意模型的自定义代码,这可能会带来安全风险。TorchServe 提供了一个 blacklist_env_vars 属性,允许您限制哪些环境变量可以被后端工作程序访问。

  • blacklist_env_vars: 用于过滤环境变量名称的正则表达式。默认值:所有环境变量对后端工作程序可见。

限制 GPU 使用率

默认情况下,TorchServe 使用所有可用的 GPU 进行推理。使用 number_of_gpu 限制 GPU 的使用率。

  • number_of_gpu: TorchServe 可用于推理的 GPU 最大数量。默认值:系统中的所有可用 GPU。

Nvidia 控制可见性

设置 nvidia 环境变量。例如

  • export CUDA_DEVICE_ORDER=”PCI_BUS_ID”

  • export CUDA_VISIBLE_DEVICES=”1,3”

启用指标 API

  • enable_metrics_api : 启用或禁用指标 API,即可以是 truefalse。默认值:true(已启用)

配置模型

  • models: 使用此选项设置特定于模型的配置。该值以 JSON 格式呈现。

{
    "modelName": {
        "version": {
            "parameterName1": parameterValue1,
            "parameterName2": parameterValue2,
            "parameterNameN": parameterValueN,
        }
    }
}

模型参数在 模型源代码 中定义

  • minWorkers: 模型的最小工作程序数量

  • maxWorkers: 模型的最大工作程序数量

  • batchSize: 模型的批处理大小

  • maxBatchDelay: 模型批处理的最大延迟(以毫秒为单位)

  • startupTimeout: 特定模型启动的超时时间(以秒为单位)。此设置优先于 default_startup_timeout,后者是所有模型的默认超时时间

  • responseTimeout: 特定模型响应的超时时间(以秒为单位)。此设置优先于 default_response_timeout,后者是所有模型的默认超时时间

  • defaultVersion: 模型的默认版本

  • marName: 模型的 mar 文件名

模型配置示例

models={\
  "noop": {\
    "1.0": {\
        "defaultVersion": true,\
        "marName": "noop.mar",\
        "minWorkers": 1,\
        "maxWorkers": 1,\
        "batchSize": 4,\
        "maxBatchDelay": 100,\
        "responseTimeout": 120\
    }\
  },\
  "vgg16": {\
    "1.0": {\
        "defaultVersion": true,\
        "marName": "vgg16.mar",\
        "minWorkers": 1,\
        "maxWorkers": 4,\
        "batchSize": 8,\
        "maxBatchDelay": 100,\
        "responseTimeout": 120\
    }\
  }\
}

从 0.8.0 版开始,TorchServe 允许使用嵌入在 MAR 文件中的 YAML 文件配置模型。此 YAML 文件包含两个不同的部分,用于确定模型的配置方式:前端参数和后端参数。(参见 详细信息)

  • 前端参数由 TorchServe 的前端控制,并指定参数名称和默认值。TorchServe 现在使用优先级顺序来确定前端中模型参数的最终值。具体来说,config.property 文件的优先级最低,其次是模型配置 YAML 文件,最后是 REST 或 gRPC 模型管理 API 的优先级最高。

  • 后端参数完全由用户控制。用户自定义的处理程序可以通过 上下文对象model_yaml_config 属性访问后端参数。例如,context.model_yaml_config[”pippy”][”rpc_timeout”]。

  • 用户可以通过在 YAML 文件的前端参数中定义 “deviceIds” 为模型分配特定的 GPU 设备 ID。TorchServe 使用循环策略将设备 ID 分配给模型的工作程序。如果在 YAML 文件中指定,它将循环使用列出的设备 ID;否则,它将使用主机上所有可见的设备 ID。

其他属性

大多数以下属性旨在用于性能调整。调整这些数字会影响可扩展性和吞吐量。

  • enable_envvars_config: 启用通过环境变量配置 TorchServe。当此选项设置为 “true” 时,TorchServe 的所有静态配置也可以通过环境变量提供。默认值:false

  • number_of_netty_threads: 前端 netty 线程数。这指定了前端 netty 服务器子 EventLoopGroup 中的线程数。此组为处理来自已接受连接的 Netty Channel 事件(即推理和管理请求)提供 EventLoop。默认值:JVM 可用的逻辑处理器数量。

  • netty_client_threads: 后端 netty 线程数。这指定了将推理响应写入前端的 WorkerThread EventLoopGroup 中的线程数。默认值:JVM 可用的逻辑处理器数量。

  • default_workers_per_model: 在启动时加载的每个模型要创建的工作程序数量。默认值:系统中的可用 GPU 或 JVM 可用的逻辑处理器数量。

  • job_queue_size: 前端将在后端可以提供服务之前排队的推理作业数。默认值:100。

  • async_logging: 启用异步日志记录以提高吞吐量,如果启用此选项,日志输出可能会延迟。默认值:false。

  • default_response_timeout: 超时时间(以秒为单位),用于所有模型后端工作程序,在它们被认为无响应并重新启动之前。默认值:120 秒。

  • default_startup_timeout: 指定模型后端工作程序初始化并准备就绪的最大时间(以秒为单位)。如果工作程序在此时间范围内无法启动,则被认为无响应,并将重新启动。默认值:120 秒。

  • unregister_model_timeout: 超时时间(以秒为单位),用于处理取消注册模型请求时清理进程,在它被认为无响应并发送错误响应之前。默认值:120 秒。

  • decode_input_request: 配置后端工作程序解码请求,当已知内容类型时。如果此选项设置为 “true”,则后端工作程序在内容类型为 “application/json” 时执行 “字节数组到 JSON 对象” 转换,并且当请求的 Content-Type 设置为 “text*” 时,后端工作程序将 “字节数组转换为 utf-8 字符串”。默认值:true

  • initial_worker_port : 这是用于自动为工作程序进程分配端口的初始端口号。

  • model_store : 模型存储目录的路径。

  • model_server_home : Torchserve 主目录。

  • max_request_size : Torchserve 接受的最大允许请求大小(以字节为单位)。默认值:6553500

  • max_response_size : Torchserve 发送的最大允许响应大小(以字节为单位)。默认值:6553500

  • limit_max_image_pixels : 默认值为 true(使用默认 PIL.Image.MAX_IMAGE_PIXELS)。如果此选项设置为 “false”,则在后端默认视觉处理程序中设置 PIL.Image.MAX_IMAGE_PIXELS = None,以用于大型图像有效负载。

  • allowed_urls : 允许从模型注册来源 URL(s) 中读取的逗号分隔正则表达式。默认值:file://.*|http(s)?://.* (所有 URL 和本地文件系统) 例如:要允许基本 URL https://s3.amazonaws.com/https://torchserve.pytorch.org/,请使用以下正则表达式字符串 allowed_urls=https://s3.amazonaws.com/.*,https://torchserve.pytorch.org/.*

    • 出于安全原因,需要在 config.properties 中设置 use_env_allowed_urls=true 以从环境变量中读取 allowed_urls

  • workflow_store : 工作流存储目录的路径。默认为模型存储目录。

  • disable_system_metrics : 当设置为“true”时,禁用系统指标的收集。默认值为“false”。

  • system_metrics_cmd: 带有参数的自定义系统指标 Python 脚本名称。例如:ts/metrics/metric_collector.py --gpu 0。默认值:空,这意味着 TorchServe 通过“ts/metrics/metric_collector.py –gpu $CUDA_VISIBLE_DEVICES”收集系统指标。

注意

所有上述配置属性可以使用环境变量设置,如下所示。

  • 在 config.properties 中将 enable_envvars_config 设置为 true

  • 将属性的环境变量导出为 TS_<PROPERTY_NAME>

    例如:要设置 inference_address 属性,请运行命令 export TS_INFERENCE_ADDRESS="http://127.0.0.1:8082"


文档

访问 PyTorch 的全面的开发者文档

查看文档

教程

获取针对初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源