⚠️ 注意:維護有限
此專案已不再積極維護。現有版本仍可使用,但已無計劃的更新、錯誤修復、新功能或安全補丁。使用者應注意,潛在漏洞可能不會得到解決。
Torchserve 使用案例¶
Torchserve 可用於不同的使用案例。為了方便使用者,此處已記錄了一些使用案例。這些使用案例假定您已在目標系統上安裝預訓練模型以及 torchserve 和 torch-model-archiver。這應該有助於您將開發環境中的模型遷移到生產/服務環境。
注意事項
如果您尚未安裝最新的 torchserve 和 torch-model-archiver,請按照 安裝 說明完成安裝。
如果計劃使用 Docker,請確保已滿足以下先決條件:
確保您的目標節點上已安裝最新的 Docker 引擎。如果尚未安裝,請使用此連結進行安裝。
按照使用 Docker 安裝的說明共享
model-store目錄並啟動 torchserve。
以下使用案例步驟使用
curl執行 torchserve REST API 呼叫。但是,您也可以使用 Chrome 外掛postman來完成此操作。請參考預設處理程式以瞭解預設處理程式。
請參考自定義處理程式以瞭解自定義處理程式。
使用案例¶
部署 PyTorch Eager Mode 模型¶
部署模型(們)的步驟
為 Torch Eager 模型建立 MAR 檔案
torch-model-archiver --model-name <your_model_name> --version 1.0 --model-file <your_model_file>.py --serialized-file <your_model_name>.pth --handler <default_handler> --extra-files ./index_to_name.json mkdir model_store mv <your_model_name>.mar model_store/
Docker - 可以直接在 Docker 中構建 MAR 檔案,請參考此處瞭解詳情。
將 MAR 檔案放在一個新目錄中,命名為
model-store(這可以是任意名稱)。Docker - 確保在啟動 torchserve Docker 映象時,MAR 檔案被複制到共享卷/目錄中。
使用以下命令啟動 torchserve -
torchserve --start --ncs --model-store <model_store or your_model_store_dir>Docker - 此項不適用。
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl https://:8081/models/<your_model_name>根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。
預期結果
能夠部署任何 Scripted Mode 模型
能夠使用已部署的模型執行推理
部署 PyTorch Scripted Mode 模型¶
先決條件
假設您有一個 TorchScripted 模型,如果不是,請按照此示例中的說明將您的 Eager Mode 模型儲存為 Scripted Mode 模型。
部署模型(們)的步驟
為Torch Scripted 模型建立 MAR 檔案
torch-model-archiver --model-name <your_model_name> --version 1.0 --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <default_handler> mkdir model-store mv <your_model_name>.mar model-store/
Docker - 可以直接在 Docker 中構建 MAR 檔案,請參考此處瞭解詳情。
將 MAR 檔案放在一個新目錄中,命名為
model-store(這可以是任意名稱)。Docker - 確保在啟動 torchserve Docker 映象時,MAR 檔案被複制到共享卷/目錄中。
使用以下命令啟動 torchserve -
torchserve --start --ncs --model-store <model_store or your_model_store_dir>Docker - 此項不適用。
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl https://:8081/models/<your_model_name>根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。
預期結果
能夠部署任何 Scripted Mode 模型
能夠使用已部署的模型執行推理
示例
../examples/image_classifier
服務 Torchserve 模型庫中的現成模型¶
此使用案例演示瞭如何部署基於 Torch Hub 的 vision 模型(分類器、物件檢測器、分割器),這些模型可在Torchserve 模型庫中找到。您也可以使用這些步驟部署 公開託管 的模型。
部署模型(們)的步驟
使用以下命令啟動 torchserve -
torchserve --start --ncs --model-store <model_store or your_model_store_dir>Docker - 此項不適用。
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=https://<public_url>/<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl https://:8081/models/<your_model_name>根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。
預期結果
能夠部署模型庫中的任何模型
能夠使用已部署的模型執行推理
示例
安全的模型服務¶
此使用案例演示瞭如何部署 torchserve 以實現安全模型服務。此處採用的示例使用了 Eager Mode 模型,但您也可以部署 Scripted Mode 模型。
部署模型(們)的步驟
為Torch Eager 模型建立 MAR 檔案
torch-model-archiver --model-name <your_model_name> --version 1.0 --model-file <your_model_file>.py --serialized-file <your_model_name>.pth --handler <default_handler> --extra-files ./index_to_name.json mkdir model_store mv <your_model_name>.mar model_store/
Docker - 可以直接在 Docker 中構建 MAR 檔案,請參考此處瞭解詳情。
將 MAR 檔案放在一個新目錄中,命名為
model-store(這可以是任意名稱)。Docker - 確保在啟動 torchserve Docker 映象時,MAR 檔案被複制到共享卷/目錄中。
建立
config.properties檔案,其中包含啟用 SSL 中提供的選項 1 或選項 2 引數。使用上面建立的 properties 檔案啟動 torchserve,命令如下:
torchserve --start --ncs --model-store <model_store or your_model_store_dir> --ts-config <your_path>/config.propertiesDocker -
docker run --rm -p 127.0.0.1:8443:8433 -p 127.0.0.1:8444:8444 -p 127.0.0.1:8445:8445 -v <local_dir>/model-store:/home/model-server/model-store <your_docker_image> torchserve --model-store=/tmp/models --ts-config <your_path>/config.properties
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -k -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=https://<s3_path>/<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl -k https://:8081/models/<your_model_name>根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl -k https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。注意 curl 命令中使用了 https 和 -k 選項。如果您有所需的金鑰,可以使用其他選項(如 -key 等)替代 -k。
預期結果
能夠部署 torchserve 並透過 HTTPS 訪問 API
示例/參考
https://github.com/pytorch/serve/blob/master/docs/configuration.md#enable-ssl
在 GPU 上服務模型¶
此使用案例演示瞭如何在 GPU 上部署 torchserve。此處採用的示例使用了 Scripted Mode 模型,但您也可以部署 Eager Mode 模型。
先決條件
假設您有一個 TorchScripted 模型,如果不是,請按照此示例中的說明將您的 Eager Mode 模型儲存為 Scripted Mode 模型。
部署模型(們)的步驟
為Torch Scripted 模型建立 MAR 檔案
torch-model-archiver --model-name <your_model_name> --version 1.0 --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <default_handler> mkdir model-store mv <your_model_name>.mar model-store/
Docker - 可以直接在 Docker 中構建 MAR 檔案,請參考此處瞭解詳情。
將 MAR 檔案移動到一個新目錄中,命名為
model-store。Docker - 確保在啟動 torchserve Docker 映象時,MAR 檔案被複制到共享卷/目錄中。
以下說明中的 torchserve 啟動命令將自動檢測 GPU 並用於載入/服務模型。如果您想限制 GPU 使用,可以使用
nvidia-smi確定 GPU 數量及對應的 ID。獲取 GPU 詳細資訊後,您可以在 config.properties 中新增number_of_gpu引數,並使用下一條指令中給出的第二條命令。例如:number_of_gpu=2使用所有 GPU 啟動 torchserve -
torchserve --start --ncs --model-store <model_store or your_model_store_dir>。限制 GPU 使用時 -torchserve --start --ncs --model-store <model_store or your_model_store_dir> --ts-config <your_path>/config.propertiesDocker - 使用所有 GPU 時
docker run --rm -it --gpus all -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 torchserve:gpu-latest。使用 GPU 1 和 2 時docker run --rm -it --gpus '"device=1,2"' -p 8080:8080 -p 8081:8081 pytorch/torchserve:latest-gpuDocker - 詳情請參考啟動 GPU 容器。
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl https://:8081/models/<your_model_name>。響應將包含指示模型已載入到 GPU 上的標誌。根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。
預期結果
能夠將任何模型部署到 GPU
能夠使用已部署的模型執行推理
服務不依賴第三方庫的自定義模型¶
此使用案例演示瞭如何部署 torchserve 來服務不依賴除 PyTorch 及相關庫之外的第三方 Python 庫的自定義模型。此處採用的示例使用了 Scripted Mode 模型,但您也可以部署 Eager Mode 模型。
先決條件
假設您有一個 TorchScripted 模型,如果不是,請按照此示例中的說明將您的 Eager Mode 模型儲存為 Scripted Mode 模型。
部署模型(們)的步驟
為Torch Scripted 模型建立 MAR 檔案
torch-model-archiver --model-name <your_model_name> --version 1.0 --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <**path/to/your_custom_handler_py_file**> mkdir model-store mv <your_model_name>.mar model-store/
Docker - 可以直接在 Docker 中構建 MAR 檔案,請參考此處瞭解詳情。
將 MAR 檔案放在一個新目錄中,命名為
model-store(這可以是任意名稱)。Docker - 確保在啟動 torchserve Docker 映象時,MAR 檔案被複制到共享卷/目錄中。
使用以下命令啟動 torchserve -
torchserve --start --ncs --model-store <model_store or your_model_store_dir>Docker - 此項不適用。
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl https://:8081/models/<your_model_name>根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。
預期結果
能夠部署任何帶有自定義處理程式的模型
示例
服務依賴第三方庫的自定義模型¶
此使用案例演示瞭如何部署 torchserve 來服務依賴除 PyTorch 及相關庫之外的第三方 Python 庫的自定義模型。此處採用的示例使用了 Scripted Mode 模型,但您也可以部署 Eager Mode 模型。
先決條件
假設您有一個 TorchScripted 模型,如果不是,請按照此示例中的說明將您的 Eager Mode 模型儲存為 Scripted Mode 模型。
部署模型(們)的步驟
建立<您的_自定義_handler_py_檔案>,該檔案使用第三方 Python 包,例如用於預訓練 NMT 模型的 fairseq。
建立一個 requirements.txt 檔案,並在其中新增
fairseqPython 包名。為帶有 requirements.txt 的Torch Scripted 模型建立 MAR 檔案。
torch-model-archiver --model-name <your_model_name> --version 1.0 --serialized-file <your_model_name>.pt --extra-files ./index_to_name.json --handler <**path/to/your_custom_handler_py_file**> --requirements-file <your_requirements_txt> mkdir model-store mv <your_model_name>.mar model-store/
Docker - 可以直接在 Docker 中構建 MAR 檔案,請參考此處瞭解詳情。
將 MAR 檔案放在一個新目錄中,命名為
model-store(這可以是任意名稱)。Docker - 確保在啟動 torchserve Docker 映象時,MAR 檔案被複制到共享卷/目錄中。
將以下引數新增到 config.properties 檔案中 -
install_py_dep_per_model=true。詳情請參考允許模型特定的自定義 Python 包。使用 config.properties 檔案啟動 torchserve,命令如下:
torchserve --start --ncs --model-store <model_store or your_model_store_dir> --ts-config <your_path>/config.propertiesDocker -
docker run –rm -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 -v <local_dir>/model-store:/home/model-server/model-store <your_docker_image> torchserve –model-store=/tmp/models –ts-config <your_path>/config.properties
註冊模型,即上面第 1 步建立的 MAR 檔案,命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"檢查模型是否已成功註冊,命令如下:
curl https://:8081/models/<your_model_name>根據預期的負載型別擴充套件 worker。上面註冊請求中我們將 min-worker 設定為 1。命令如下:
curl -v -X PUT "https://:8081/models/<your model_name>?min_worker=1&synchronous=true”使用以下
curlAPI 呼叫執行推理:curl https://:8080/predictions/<your_model_name> -T <your_input_file>。您也可以使用PostmanGUI 工具進行 HTTP 請求和響應。
預期結果
能夠部署帶有依賴第三方 Python 庫的自定義處理程式的模型
示例和參考
服務用於 A/B 測試的模型¶
此使用案例演示瞭如何使用版本 API 服務同一模型的兩個或多個版本。它是上述任何使用案例的擴充套件。
先決條件
您已按照上述任一流程操作,並且 torchserve 已正確設定,同時安裝了 torch-model-archiver。
部署模型(們)的步驟
建立一個版本為 1.0 或根據需求的模型(即 MAR 檔案)。按照上面給出的步驟建立模型檔案,例如 torch-model-archiver –model-name
–version 1.0 –model-file model.py –serialized-file .pth –extra-files index_to_name.json –handler .py 建立另一個版本為 2.0 或根據需求的模型(即 MAR 檔案),例如 torch-model-archiver –model-name
–version 2.0 –model-file model.py –serialized-file .pth –extra-files index_to_name.json –handler .py 使用初始 worker 註冊這兩個模型。如果需要,可以使用更新 API 增加 worker 數量。命令如下:
curl -v -X POST "https://:8081/models?initial_workers=1&synchronous=true&url=<your-model-name-X>.mar"現在您可以使用以下命令呼叫這些模型:
模型版本 1.0:
curl https://:8081/models/<your-model-name-X>/1.0或curl https://:8080/predictions/<your-model-name-X>/1.0 -F "data=@kitten.jpg"模型版本 2.0:
curl https://:8081/models/<your-model-name-X>/2.0或curl https://:8080/predictions/<your-model-name-X>/2.0 -F "data=@kitten.jpg"
預期結果
能夠部署同一模型的多個版本
示例和參考