快速鍵

進階設定

對於大多數用例,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. 如果將 --ts-config 參數傳遞給 torchserve,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 預設僅允許 localhost 存取。推論 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 監聽 localhost 上的埠 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 使用循環策略將裝置 ID 分配給模型的工作程序。如果在 YAML 檔案中指定,它會循環列出的裝置 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:用於設定後端工作程序是否解碼請求的配置,當 Content-Type 已知時。如果設定為“true”,則當 Content-Type 為 “application/json” 時,後端工作程序會將 “Bytearray” 轉換為 JSON 物件;當請求的 Content-Type 設定為 “text*” 時,則將 “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,以處理大型圖像 Payload。

  • allowed_urls:以逗號分隔,允許註冊模型的來源 URL(s) 的正規表示式。 預設值: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:Workflow 儲存目錄的路徑。預設為模型儲存目錄。

  • 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 的完整開發人員文件

檢視文件

教學

取得適合初學者和進階開發人員的深入教學課程

檢視教學

資源

尋找開發資源並獲得問題解答

檢視資源