⚠️ 注意:有限维护
本项目已不再积极维护。虽然现有版本仍然可用,但没有计划进行更新、错误修复、新功能开发或安全补丁。用户应注意,漏洞可能不会得到解决。
高级配置¶
TorchServe 的默认设置应能满足大多数用例。但是,如果您想自定义 TorchServe,本主题中描述的配置选项可供使用。
配置 TorchServe 有三种方法。按优先级顺序,它们是
环境变量
命令行参数
配置文件
例如,环境变量的值会覆盖命令行参数和配置文件中的属性值。命令行参数的值会覆盖配置文件中的值。
环境变量¶
您可以通过设置以下环境变量来改变 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
文件
如果设置了
TS_CONFIG_FILE
环境变量,TorchServe 将从该环境变量指定的路径加载配置。如果向
torchserve
传递了--ts-config
参数,TorchServe 将从该参数指定的路径加载配置。如果您在调用
torchserve
的文件夹中存在config.properties
文件,TorchServe 将从当前工作目录加载该config.properties
文件。如果以上都没有指定,TorchServe 将加载具有默认值的内置配置。
自定义 JVM 选项¶
要控制 TorchServe 前端的内存占用,请在 config.properties
文件中配置 vmargs 属性
默认值:N/A,使用 JVM 默认选项
调整 JVM 选项以满足您的内存需求。
在启动时加载模型¶
您可以通过设置 model_store
和 load_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_store
和 load_models
属性将被覆盖。
配置 TorchServe 监听地址和端口¶
TorchServe 本身不支持身份验证。为避免未经授权的访问,TorchServe 默认只允许本地主机访问。推理 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 监听端口 7070,管理 gRPC API 监听本地主机端口 7071。
要配置不同的地址,请使用以下属性
grpc_inference_address
:推理 gRPC API IP 地址。默认值:127.0.0.1grpc_management_address
:管理 gRPC API IP 地址。默认值:127.0.0.1
要配置不同的端口,请使用以下属性
grpc_inference_port
:推理 gRPC API 绑定端口。默认值:7070grpc_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_address
、management_address
或 metrics_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 的方式
使用密钥库
keystore: 密钥库文件位置。如果密钥库中存在多个私钥条目,则将使用第一个条目。
keystore_pass:密钥库密码。密码(如果适用)必须与密钥库密码相同。
keystore_type:密钥库类型。默认值:PKCS12。
使用私钥/证书文件
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,即可以是true
或false
。默认值: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 具有最高优先级。
后端参数完全由用户控制。用户自定义的处理器可以通过 context 对象的
model_yaml_config
属性访问后端参数。例如,context.model_yaml_config[”pippy”][”rpc_timeout”]。用户可以通过在 YAML 文件的前端参数中定义“deviceIds”来为模型分配特定的 GPU 设备 ID。TorchServe 使用循环策略为模型的 worker 分配设备 ID。如果在 YAML 文件中指定,它会循环分配列出的设备 ID;否则,它会使用主机上所有可见的设备 ID。
其他属性¶
以下大多数属性旨在进行性能调优。调整这些数值将影响可扩展性和吞吐量。
enable_envvars_config
:启用通过环境变量配置 TorchServe。当此选项设置为“true”时,TorchServe 的所有静态配置也可以通过环境变量提供。默认值:falsenumber_of_netty_threads
:前端 netty 线程数。这指定了前端 netty 服务器子 EventLoopGroup 中的线程数。此组为处理来自已接受连接的 Netty 通道事件(即推理和管理请求)提供 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 字符串”。默认值:trueinitial_worker_port
:这是自动分配给工作进程的起始端口号。model_store
:模型存储目录路径。model_server_home
:Torchserve 主目录。max_request_size
:Torchserve 接受的最大允许请求大小,单位为字节。默认值:6553500max_response_size
:Torchserve 发送的最大允许响应大小,单位为字节。默认值:6553500limit_max_image_pixels
:默认值为 true(使用默认的 PIL.Image.MAX_IMAGE_PIXELS)。如果此选项设置为“false”,则在后端默认视觉处理器中将 PIL.Image.MAX_IMAGE_PIXELS 设置为 None,以处理大型图像载荷。allowed_urls
:允许注册模型的源 URL 的逗号分隔正则表达式。默认值:file://.*|http(s)?://.*
(所有 URL 和本地文件系统)。例如:要允许基础 URLhttps://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"
。