Torchserve(二) ——高级配置
高级配置
TorchServe 的默认设置对于大多数用例来说应该足够了。但是,如果您要自定义 TorchServe,则可以使用本主题中描述的配置选项。
配置 TorchServe 的方法有 3 种。按优先顺序排列,它们是:
-
环境变量(Envionment Variables)
-
命令行参数(Command line arguments)
-
配置文件(Configuration file)
优先级为 环境变量 > 命令行参数 > 配置文件
例如,环境变量的值会覆盖命令行参数和配置文件中的属性。命令行参数的值会覆盖配置文件中的值。
5.1 环境变量
您可以通过设置以下环境变量来更改 TorchServe 行为:
-
JAVA_HOME
-
PYTHONPATH
-
TS_CONFIG_FILE
-
LOG_LOCATION
-
METRICS_LOCATION
注意:环境变量的优先级高于命令行或 config.properties。环境变量的值会覆盖其他属性值。
5.2. 命令行参数
torchserve --help
usage: torchserve [-h] [-v | --start | --stop] [--ts-config TS_CONFIG] [--model-store MODEL_STORE] [--workflow-store WORKFLOW_STORE] [--models MODEL_PATH1 MODEL_NAME=MODEL_PATH2... [MODEL_PATH1 MODEL_NAME=MODEL_PATH2... ...]] [--log-config LOG_CONFIG] [--foreground] [--no-config-snapshots] [--plugins-path PLUGINS_PATH] Torchserve optional arguments: -h, --help show this help message and exit -v, --version Return TorchServe Version --start Start the model-server --stop Stop the model-server --ts-config TS_CONFIG Configuration file for model server --model-store MODEL_STORE Model store location from where local or default models can be loaded --workflow-store WORKFLOW_STORE Workflow store location from where local or default workflows can be loaded --models MODEL_PATH1 MODEL_NAME=MODEL_PATH2... [MODEL_PATH1 MODEL_NAME=MODEL_PATH2... ...] Models to be loaded using [model_name=]model_location format. Location can be a HTTP URL or a model archive file in MODEL_STORE. --log-config LOG_CONFIG Log4j configuration file for model server --foreground Run the model server in foreground. If this option is disabled, the model server will run in the background. --no-config-snapshots, --ncs Prevents to server from storing config snapshot files. --plugins-path PLUGINS_PATH, --ppath PLUGINS_PATH plugin jars to be included in torchserve class path
在torchserve启动时可根据参数配置
调用时使用以下命令行参数自定义 TorchServe 行为:
-
–ts-config 如果未设置环境变量
TS_CONFIG_FILE,则加载指定的配置文件config.properties;
-
–model-store 覆盖config.properties文件中的
model_store
属性; -
–models 覆盖config.properties文件中的
load_models
属性; -
–log-config 覆盖默认的log4j2.xml文件;
-
–foreground 如果属性该属性打开,则在前台运行torchserve. 如果关闭, TorchServe在后台运行;
5.3. 属性配置文件config.properties
TorchServe使用config.properties文件来保存配置
. TorchServe按照如下优先级来定位config.properties文件
:
-
如果设置了环境变量TS_CONFIG_FILE
, TorchServe会从环境变量指定的路径加载配置. -
如果将参数--ts-config
传递给torchserve
, 则TorchServe从参数指定的路径加载配置. -
如果调用的torchserve目录存在config.properties
文件, 则TorchServe会在当前工作目录加载config.properties
文件. -
如果以上都没有被指定, TorchServe会加载一个内建的配置.
5.3.1. 自定义JVM选项
为了控制 TorchServe 前端内存占用,请在config.properties 文件中配置vmargs属性。
-
default: N/A, use JVM default options
调整JVM选项以适合您的内存需求。
5.3.2. 在启动时加载模型
在启动时,您可以通过设置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
属性会被命令行参数覆盖(如果被指定).
5.3.3. 配置TorchServe 监听地址和端口
TorchServe本身不支持身份验证. 为了避免未经授权的访问, TorchServe默认仅仅允许本地访问. 推理API监听8080端口. 管理API监听8081端口. 两者都支持HTTP请求. 这些都是默认端口. 请参阅Enable 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地址为
0.0.0.0
. 要对特定IP地址上进行模型预测,请指定IP地址和端口.
在配置文件config.properties中绑定IP,可支持远程访问进行模型预测。
# bind inference API to all network interfaces with SSL enabled inference_address=https://0.0.0.0:8443 # bind inference API to private network interfaces inference_address=https://172.16.1.10:8080
5.3.4. 配置TorchServe gRPC 监听端口
默认情况下,推理 gRPC API 监听7070端口, 管理 gRPC API 监听7071端口.
使用如下属性配置端口
-
grpc_inference_port
: 推理gRPC API绑定端口. 默认: 7070 -
grpc_management_port
: 管理gRPC API绑定端口. 默认: 7071
5.3.5. 启用 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: keystore密钥库keystore文件位置. 如果密钥库中存在多个私钥条目,则使用第一个。
-
keystore_pass: 密钥库密码。密码(如果适用)必须与密钥库密码相同。
-
keystore_type: 密钥库的类型。默认值:PKCS12。
-
使用private-key/certificate(私钥/证书)文件:
-
private_key_file: 私钥文件位置。支持 PKCS8 和 OpenSSL 私钥。
-
certificate_file: X509 证书链文件位置。
5.3.5.1. 例子
选项 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
5.3.6. 配置跨领域资源共享Cross-Origin Resource Sharing (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
5.3.7. Prefer direct buffer首选直接缓冲区
Configuration parameter prefer_direct_buffer controls if the model server will be using direct memory specified by -XX:MaxDirectMemorySize. This parameter is for model server only and doesn’t affect other packages’ usage of direct memory buffer. Default: false
如果配置参数 prefer_direct_buffer,模型服务器将使用 -XX:MaxDirectMemorySize 指定直接内存。此参数仅适用于模型服务器,不影响其他包对直接内存缓冲区的使用。默认值:假
prefer_direct_buffer=true
5.3.8. 允许模型特定的自定义python包.
自定义 models/handlers 可能依赖于没有被TrochServe安装时一同默认安装不同的python包. 用户可以提供一个requirements.txt文件,其中包含要安装的Python包的所需列表。通过配置参数 install_py_dep_per_model
可以控制模型服务是否安装 requirements
文件支持的依赖包。 默认: false
install_py_dep_per_model=true
用户还可以使用参数--extra-files
在创建模型存档时提供 zip 或 tar.gz 格式的自定义 python 包,并在依赖文件requirements中添加依赖包文件名入口
。
5.3.9. 限制后端工作人员访问环境变量
环境变量可能包含敏感信息,如 AWS 凭证. 后端工作人员执行任意模型的自定义代码,可能暴露安全风险. TorchServe 提供 blacklist_env_vars
属性允许限制哪些环境变量可以被后端工程师访问.
-
blacklist_env_vars
: 用于过滤掉环境变量名称的正则表达式。默认值:所有环境变量对后端工作人员可见。
5.3.10. 限制 GPU 使用
默认情况下, TorchServe 可以使用所有GPUs 进行推理. 可以通过使用 number_of_gpu
去限制GPUs的使用.
-
number_of_gpu
: TorchServe 可用于进行推理的GPUs 的最大数量. 默认: 系统中所有的 GPUs .
5.3.11. 控制cuda可见性
设置nvidia环境变量控制cuda可见性. 如:
-
export CUDA_DEVICE_ORDER=”PCI_BUS_ID”
-
export CUDA_VISIBLE_DEVICES=”1,3”
5.3.12. 启用metrics api指标API
-
enable_metrics_api
: 设置true
或false 启用或关闭指标API
. 默认: true (启用) -
metrics_format
: 使用本参数指定指标报告格式. 目前, 仅仅唯一支持的默认值是prometheus
。需要与上面的参数enable_metrics_api
一起使用.
5.3.13. Config model
-
models
: 使用本参数为每个模型设置配置,使用json格式,如下:
{ "modelName": { "version": { "parameterName1": parameterValue1, "parameterName2": parameterValue2, "parameterNameN": parameterValueN, } } }
模型参数定义在 model source code
minWorkers: the minimum number of workers of a model maxWorkers: the maximum number of workers of a model batchSize: the batch size of a model maxBatchDelay: the maximum dalay in msec of a batch of a model responseTimeout: the timeout in msec of a model's response defaultVersion: the default version of a model marName: the mar file name of a model
模型配置实例:
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\ }\ }\ }
5.3.14. 其它属性
以下大多数属性都是为模型调优而设计。调整这些数值可能影响可扩展性和吞吐量。
-
enable_envvars_config
: 启用通过环境变量配置TorchServe. 当选项被设置为“true”时, TorchServe的所有静态配置都可以通过环境变量设置,默认: false。 -
number_of_netty_threads
: 前端netty线程的数量. 这指定了前端 netty 服务器的子EventLoopGroup中的线程数。该组提供 EventLoops 用于处理来自已接受连接的 Netty Channel 事件(即推理和管理请求)。默认值:JVM 可用的逻辑处理器数。 -
netty_client_threads
: 后端 netty 线程数。这指定了将推理响应写入前端的 WorkerThread EventLoopGroup中的线程数。默认值:JVM 可用的逻辑处理器数。 -
default_workers_per_model
: 模型启动时,为每个模型创建的进程数。默认: 系统可用的GPUs 数或者JVM可用的CPU数. -
job_queue_size
: 后端可以开始处理服务前,前端排队的推理工作数。默认: 100. -
async_logging
: 启用异步日志记录以获得更高的吞吐量,如果启用,日志输出可能会延迟。默认值:false。 -
default_response_timeout
: 超时,以秒为单位,用于模型的后端工作人员在被视为无响应并重新启动之前。默认值:120 秒。 -
unregister_model_timeout
: 超时,以秒为单位,用于在清理进程时处理注销模型请求,然后再将其视为无响应并发送错误响应。默认值:120 秒。 -
decode_input_request
: 当内容类型已知时,让后端工作人员解码请求的配置。如果设置为“true”,则后端工作人员在内容类型为“application/json”时执行“Bytearray 到 JSON 对象”转换,而后端工作人员在请求的 Content-Type 时将“Bytearray 转换为 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)?://.” (所有URLs和本地文件系统) eg : 允许基本的 URLshttps://s3.amazonaws.com/
和https://torchserve.pytorch.org/
使用正则表达式字符串 stringallowed_urls=https://s3.amazonaws.com/.*,https://torchserve.pytorch.org/.*
-
workflow_store
: 工作流存储目录的路径。默认为模型存储目录。
注意:
以上所有配置属性都可以使用环境变量进行设置,如下所示。
-
在config.properties设置
enable_envvars_config
为 true。 -
将属性的环境变量export 为
TS_<PROPERTY_NAME>
.eg: 命令行运行
export TS_INFERENCE_ADDRESS="http://127.0.0.1:8082" 设置inference_address推理地址属性
.