進階設定¶
對於大多數用例,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 會從環境變數指定的路徑載入設定。如果將
--ts-config
參數傳遞給torchserve
,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 預設僅允許 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.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 使用循環策略將裝置 ID 分配給模型的工作程序。如果在 YAML 檔案中指定,它會循環列出的裝置 ID;否則,它會使用主機上所有可見的裝置 ID。
其他屬性¶
以下大多數屬性都設計用於效能調整。調整這些數字會影響可擴展性和吞吐量。
enable_envvars_config
:啟用透過環境變數設定 TorchServe。當此選項設定為 "true" 時,TorchServe 的所有靜態組態也可以透過環境變數來設定。預設值:falsenumber_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 和本機檔案系統)。例如:要允許基本 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
: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"
。