目录

高级配置

TorchServe 的默认设置应该足以满足大多数使用场景。然而,如果您希望自定义 TorchServe,本主题中描述的配置选项可供选择。

TorchServe 可以通过三种方式进行配置。按照优先级顺序,它们是:

  1. 环境变量

  2. 命令行参数

  3. 配置文件

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

环境变量

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

  • JAVA_HOME

  • PYTHONPATH

  • TS_CONFIG_FILE

  • LOG_LOCATION

  • METRICS_LOCATION

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

命令行参数

自定义TorchServe行为,通过在调用torchserve时使用以下命令行参数:

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

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

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

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

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

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

配置.properties文件

TorchServe 使用一个 config.properties 文件来存储配置。TorchServe 使用以下顺序优先级来查找这个 config.properties 文件:

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

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

  3. 如果在调用的文件夹中有一个config.properties,TorchServe将从当前工作目录加载config.properties文件。

  4. 如果没有指定以上任何一项,TorchServe将加载一个内置配置,其中包含默认值。

自定义JVM选项

为了控制TorchServe前端内存占用,配置config.properties文件中的vmargs属性

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

调整JVM选项以适应您的内存需求。

在启动时加载模型

你可以通过设置model_storeload_models属性来配置TorchServe在启动时加载模型。 以下值是有效的:

  • load_models

    • standalone: 默认:无,启动时未加载任何模型。

    • 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的值指定。

Note: model_store and load_models properties are overridden by command line parameters, if specified.

配置 TorchServe 监听地址和端口

TorchServe 不支持原生认证。为了避免未经授权的访问,TorchServe 默认只允许 localhost 访问。 推理 API 监听端口 8080。管理 API 监听端口 8081。两者都期望 HTTP 请求。这些是默认端口。 有关配置 HTTPS 的信息,请参阅 启用 SSL

  • 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 正在监听端口 7070,管理 gRPC API 默认情况下在本地主机上监听端口 7071。

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

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

  • grpc_management_address: 管理 gRPC API 地址。默认值: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_pass: 证书库密码。如果适用,密码必须与证书库密码相同。

  • keystore_type: 证书库类型。默认:PKCS12。

  1. 使用私钥/证书文件:

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

  • 证书文件: 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 头部来告诉浏览器一个运行在某个域(域名)上的网页应用可以访问来自另一个不同域服务器上选择的资源。

默认情况下,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 标志提供自定义的 Python 包(zip 或 tar.gz 格式),并在 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;否则,它将使用主机上可见的所有设备 ID。

其他属性

以下大多数属性都是为性能调优设计的。调整这些数值将影响可扩展性和吞吐量。

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

  • number_of_netty_threads: 前端 Netty 线程的数量。这指定了前端 Netty 服务器的子 EventLoopGroup 中的线程数。该组为从已接受连接处理 Netty Channel 事件(即推理和管理请求)提供 EventLoops。默认值: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 对象”的转换; 当请求的内容类型设置为“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(多个用逗号分隔)的正则表达式,模型可以从这些URL注册。默认值: 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”收集系统指标。

NOTE

以上所有配置属性都可以通过环境变量进行设置,如下所示。

  • 设置 enable_envvars_config 为 config.properties 中的 true

  • 导出环境变量以将属性设置为TS_<PROPERTY_NAME>

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


文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

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

查看资源