⚠️ 注意:有限維護
本專案已不再積極維護。雖然現有版本仍然可用,但沒有計劃進行更新、錯誤修復、新功能開發或安全補丁。使用者應注意,漏洞可能不會得到解決。
高階配置¶
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 將從該環境變數指定的路徑載入配置。如果向
torchserve傳遞了--ts-config引數,TorchServe 將從該引數指定的路徑載入配置。如果您在呼叫
torchserve的資料夾中存在config.properties檔案,TorchServe 將從當前工作目錄載入該config.properties檔案。如果以上都沒有指定,TorchServe 將載入具有預設值的內建配置。
自定義 JVM 選項¶
要控制 TorchServe 前端的記憶體佔用,請在 config.properties 檔案中配置 vmargs 屬性
預設值:N/A,使用 JVM 預設選項
調整 JVM 選項以滿足您的記憶體需求。
在啟動時載入模型¶
您可以透過設定 model_store 和 load_models 屬性來配置 TorchServe 在啟動期間載入模型。以下是有效的值
load_modelsstandalone:預設值:N/A,啟動時不載入模型。all:載入model_store中存在的所有模型。model1.mar, model2.mar:從model_store中載入指定 MAR 檔案中的模型。model1=model1.mar, model2=model2.mar:從model_store中載入具有指定名稱和 MAR 檔案的模型。
model_storestandalone:預設值:N/A,停用從本地磁碟載入模型。pathname:模型儲存位置由pathname的值指定。
注意:如果指定了命令列引數,則 model_store 和 load_models 屬性將被覆蓋。
配置 TorchServe 監聽地址和埠¶
TorchServe 本身不支援身份驗證。為避免未經授權的訪問,TorchServe 預設只允許本地主機訪問。推理 API 監聽埠 8080。管理 API 監聽埠 8081。兩者都期望 HTTP 請求。這些是預設埠。請參閱啟用 SSL 配置 HTTPS。
inference_address:推理 API 繫結地址。預設值:http://127.0.0.1:8080management_address:管理 API 繫結地址。預設值:http://127.0.0.1:8081metrics_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.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 使用迴圈策略為模型的 worker 分配裝置 ID。如果在 YAML 檔案中指定,它會迴圈分配列出的裝置 ID;否則,它會使用主機上所有可見的裝置 ID。
其他屬性¶
以下大多數屬性旨在進行效能調優。調整這些數值將影響可擴充套件性和吞吐量。
enable_envvars_config:啟用透過環境變數配置 TorchServe。當此選項設定為“true”時,TorchServe 的所有靜態配置也可以透過環境變數提供。預設值:falsenumber_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 字串”。預設值:trueinitial_worker_port:這是自動分配給工作程序的起始埠號。model_store:模型儲存目錄路徑。model_server_home:Torchserve 主目錄。max_request_size:Torchserve 接受的最大允許請求大小,單位為位元組。預設值:6553500max_response_size:Torchserve 傳送的最大允許響應大小,單位為位元組。預設值:6553500limit_max_image_pixels:預設值為 true(使用預設的 PIL.Image.MAX_IMAGE_PIXELS)。如果此選項設定為“false”,則在後端預設視覺處理器中將 PIL.Image.MAX_IMAGE_PIXELS 設定為 None,以處理大型影像載荷。allowed_urls:允許註冊模型的源 URL 的逗號分隔正則表示式。預設值: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:工作流儲存目錄路徑。預設為模型儲存目錄。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"。