Torchserve 使用案例¶
Torchserve 可用於不同的使用案例。為了方便使用者,這裡記錄了其中的一些案例。 這些使用案例假設您具有預先訓練的模型,並且在您的目標系統上安裝了 torchserve
和 torch-model-archiver
。 這應該有助於您將開發環境模型轉移到生產/服務環境。
注意事項
如果您尚未安裝最新的 torchserve 和 torch-model-archiver,請按照安裝說明完成安裝
如果計劃使用 docker,請確保已準備好以下先決條件 -
確保您的目標節點上安裝了最新的 docker 引擎。 如果沒有,請使用此連結進行安裝。
按照使用 docker 安裝說明來分享
model-store
目錄並啟動 torchserve
以下使用案例步驟使用
curl
來執行 torchserve REST api 呼叫。 但是,您也可以使用 chrome 插件postman
。請參考預設處理器以瞭解預設處理器。
請參考自訂處理器以瞭解自訂處理器。
使用案例¶
部署 pytorch eager 模式模型¶
部署模型的步驟
為 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 - 確保 MAR 檔案在啟動 torchserve docker 映像檔時,被複製到共享的 volume/目錄中。
使用以下指令啟動 torchserve -
torchserve --start --ncs --model-store <model_store 或 your_model_store_dir>
Docker - 不適用。
註冊模型,即上述步驟 1 中建立的 MAR 檔案,使用以下指令 -
curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"
檢查模型是否成功註冊,使用以下指令 -
curl https://127.0.0.1:8081/models/<your_model_name>
根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。
預期結果
能夠部署任何腳本模型
能夠使用已部署的模型進行推論
部署 pytorch 腳本模式模型¶
先決條件
假設您有一個 torchscripted 模型,如果沒有,請按照此範例中的說明將您的 eager 模式模型儲存為腳本模型。
部署模型的步驟
為torch 腳本模型建立 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 - 確保 MAR 檔案在啟動 torchserve docker 映像檔時,被複製到共享的 volume/目錄中。
使用以下指令啟動 torchserve -
torchserve --start --ncs --model-store <model_store 或 your_model_store_dir>
Docker - 不適用。
註冊模型,即上述步驟 1 中建立的 MAR 檔案,使用以下指令 -
curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"
檢查模型是否成功註冊,使用以下指令 -
curl https://127.0.0.1:8081/models/<your_model_name>
根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。
預期結果
能夠部署任何腳本模型
能夠使用已部署的模型進行推論
範例
../examples/image_classifier
在 torchserve 模型庫上提供現成的模型¶
此用例演示了基於 torch hub 的 vision
模型(分類器、物件偵測器、分割器)在 torchserve 模型庫上的部署。 使用這些步驟來部署 公開託管的 模型。
部署模型的步驟
使用以下指令啟動 torchserve -
torchserve --start --ncs --model-store <model_store 或 your_model_store_dir>
Docker - 不適用。
註冊模型,即上述步驟 1 中建立的 MAR 檔案,使用以下指令 -
curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=https://<public_url>/<your model_name>.mar"
檢查模型是否成功註冊,使用以下指令 -
curl https://127.0.0.1:8081/models/<your_model_name>
根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。
預期結果
能夠部署模型庫中提供的任何模型
能夠使用已部署的模型進行推論
範例
安全模型服務¶
此用例演示了用於安全模型服務的 torchserve 部署。 這裡採用的範例使用 eager 模式模型,但您也可以部署腳本模型。
部署模型的步驟
為 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 - 確保 MAR 檔案在啟動 torchserve docker 映像檔時,被複製到共享的 volume/目錄中。
建立具有參數選項 1 或 2 的
config.properties
檔案,如 啟用 SSL 中給出的。使用上面建立的屬性檔案啟動 torchserve -
torchserve --start --ncs --model-store <model_store 或 your_model_store_dir> --ts-config <your_path>/config.properties
Docker -
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://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=https://<s3_path>/<your model_name>.mar"
檢查模型是否成功註冊,使用以下指令 -
curl -k https://127.0.0.1:8081/models/<your_model_name>
根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl -k https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。注意在 curl 命令中使用 https 和 -k 選項。 如果您有需要的金鑰,可以使用其他選項(例如 -key 等)代替 -k。
預期結果
能夠部署 torchserve 並通過 HTTPs 存取 API
範例/參考
https://github.com/pytorch/serve/blob/master/docs/configuration.md#enable-ssl
在 GPU 上提供模型¶
此用例演示了在 GPU 上部署 torchserve。 這裡採用的範例使用腳本模式模型,但您也可以部署 eager 模型。
先決條件
假設您有一個 torchscripted 模型,如果沒有,請按照此範例中的說明將您的 eager 模式模型儲存為腳本模型。
部署模型的步驟
為torch 腳本模型建立 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 - 確保 MAR 檔案在啟動 torchserve docker 映像檔時,被複製到共享的 volume/目錄中。
在以下說明中,
torchserve start
命令會自動偵測 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 或 your_model_store_dir>
。使用受限制的 GPU:torchserve --start --ncs --model-store <model_store 或 your_model_store_dir> --ts-config <your_path>/config.properties
Docker - 對於所有 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-gpu
Docker - 更多詳細資訊請參考啟動 GPU 容器
註冊模型,即上述步驟 1 中建立的 MAR 檔案,使用以下指令 -
curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"
檢查模型是否已成功註冊,如:
curl https://127.0.0.1:8081/models/<your_model_name>
回應中會包含一個 flag,指示模型是否已載入到 GPU 上。根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。
預期結果
能夠將任何模型部署到 GPU
能夠使用已部署的模型進行推論
提供沒有第三方依賴的自定義模型¶
此用例示範了 torchserve 對於沒有 Python 依賴(除了 PyTorch 和相關函式庫之外)的自定義模型的部署。這裡使用的範例是腳本模式模型,但您也可以部署 eager 模式模型。
先決條件
假設您有一個 torchscripted 模型,如果沒有,請按照此範例中的說明將您的 eager 模式模型儲存為腳本模型。
部署模型的步驟
為torch 腳本模型建立 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 - 確保 MAR 檔案在啟動 torchserve docker 映像檔時,被複製到共享的 volume/目錄中。
使用以下指令啟動 torchserve -
torchserve --start --ncs --model-store <model_store 或 your_model_store_dir>
Docker - 不適用。
註冊模型,即上述步驟 1 中建立的 MAR 檔案,使用以下指令 -
curl -v -X POST "https://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"
檢查模型是否成功註冊,使用以下指令 -
curl https://127.0.0.1:8081/models/<your_model_name>
根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。
預期結果
能夠部署任何帶有自定義處理器的模型
範例
提供具有第三方依賴的自定義模型¶
此用例示範了 torchserve 對於具有 Python 依賴(除了 PyTorch 和相關函式庫之外)的自定義模型的部署。這裡使用的範例是腳本模式模型,但您也可以部署 eager 模式模型。
先決條件
假設您有一個 torchscripted 模型,如果沒有,請按照此範例中的說明將您的 eager 模式模型儲存為腳本模型。
部署模型的步驟
建立 <your_custom_handler_py_file>,它使用第三方 Python 套件,例如 fairseq,用於預訓練的 NMT 模型。
建立一個 requirements.txt 檔案,其中包含
fairseq
Python 套件名稱的項目。為帶有 requirements.txt 的 TorchScript 模式模型建立 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 - 確保 MAR 檔案在啟動 torchserve docker 映像檔時,被複製到共享的 volume/目錄中。
將以下參數新增到 config.properties 檔案中:
install_py_dep_per_model=true
。更多詳細資訊請參考允許模型特定的自定義 Python 套件。使用以下命令和 config.properties 檔案啟動 torchserve:
torchserve --start --ncs --model-store <model_store 或 your_model_store_dir> --ts-config <your_path>/config.properties
Docker - `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://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your model_name>.mar"
檢查模型是否成功註冊,使用以下指令 -
curl https://127.0.0.1:8081/models/<your_model_name>
根據預期的負載類型擴展 worker。我們在上面的註冊請求中將 min-worker 設定為 1。
curl -v -X PUT "https://127.0.0.1:8081/models/<your model_name>?min_worker=1&synchronous=true”
使用以下
curl
API 呼叫進行推論 -curl https://127.0.0.1:8080/predictions/<your_model_name> -T <your_input_file>
。您也可以使用Postman
GUI 工具進行 HTTP 請求和回應。
預期結果
能夠部署任何帶有自定義處理器,且具有第三方 Python 依賴的模型
範例和參考
提供用於 AB 測試的模型¶
此用例示範了使用版本 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://127.0.0.1:8081/models?initial_workers=1&synchronous=true&url=<your-model-name-X>.mar"
現在您可以調用這些模型,如下所示:
模型版本 1.0:
curl https://127.0.0.1:8081/models/<your-model-name-X>/1.0
ORcurl https://127.0.0.1:8080/predictions/<your-model-name-X>/1.0 -F "data=@kitten.jpg"
模型版本 2.0:
curl https://127.0.0.1:8081/models/<your-model-name-X>/2.0
ORcurl https://127.0.0.1:8080/predictions/<your-model-name-X>/2.0 -F "data=@kitten.jpg"
預期結果
能夠部署同一個模型的多個版本
範例和參考