Torchserve(二) ——高级配置

高级配置

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

配置 TorchServe 的方法有 3 种。按优先顺序排列,它们是:

  1. 环境变量(Envionment Variables)

  2. 命令行参数(Command line arguments)

  3. 配置文件(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文件:

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

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

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

  4. 如果以上都没有被指定, 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_addressmanagement_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:

  1. 使用秘钥库keystore:

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

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

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

  1. 使用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 : 允许基本的 URLs https://s3.amazonaws.com/ 和 https://torchserve.pytorch.org/ 使用正则表达式字符串 string allowed_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推理地址属性.

 

 

posted @ 2022-06-14 12:04  IllidanStormrage  阅读(939)  评论(0编辑  收藏  举报