快捷方式

⚠️ 注意:有限維護

本專案已不再積極維護。雖然現有版本仍然可用,但沒有計劃進行更新、錯誤修復、新功能開發或安全補丁。使用者應注意,漏洞可能不會得到解決。

高階配置

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. 如果向 torchserve 傳遞了 --ts-config 引數,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 預設只允許本地主機訪問。推理 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.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 具有最高優先順序。

  • 後端引數完全由使用者控制。使用者自定義的處理器可以透過 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 的所有靜態配置也可以透過環境變數提供。預設值:false

  • number_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 字串”。預設值: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 的逗號分隔正則表示式。預設值: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 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源