# 二階段敗血症安裝 ###### tags: `二階段敗血症` ## 如何下載 Docker Image ## 如何匯入 Docker Image ## 如何安裝/啟動/停止 1. **下載 Docker Image 的 `.tar` 檔,並將 `.tar` 檔放到專案的路徑** 2. **使用 `.tar` 檔建立 Docker Image** ``` docker load --input sepsis_2nd_api_bentoml_image_test_20230426v1.tar ``` 3. **查看 Docker Image 是否成功建立** ``` docker images ``` ![](https://i.imgur.com/JJUYeAy.png) 4. **執行 Docker** ``` docker run --name sepsis_2nd_app -it --rm \ -p <PORT NUMBER>:3000 \ -v <LOG PATH>:/home/bentoml/bento/src/logs \ sepsis_2nd_model_serving:latest \ serve --production ``` :::info 1. `<PORT NUMBER>`: request 欲發送的端口號。 2. `<LOG PATH>`: 紀錄日誌的路徑。 3. `--rm`: **control + C** 結束;`-d`: 背景執行 4. `serve --production`: **CLI** ::: 7. **停止 Docker Container** + **查看 Docker Container ID** ``` docker ps ``` ![](https://i.imgur.com/y3duVqo.png) + **停止 Docker Container** ``` docker stop <CONTAINER ID> ``` ## 如何測試服務是否可以正常運行 bentoml service 有自帶 health checker。使用 GET 方法發送 request 到 `healthz` endpoint,回覆 200 response,確認 bentoml service 已啟動。 準備發送 request 的範例程式 ```python= import requests url = "http://127.0.0.1:3000/healthz" response = requests.get(url=url) print(response.status_code, response) ``` ![](https://i.imgur.com/WztBGqu.png) ![](https://i.imgur.com/20b6Lhw.png) ## 如何查看 log 在執行 docker run 的時候有帶以下指令 `-v <LOG PATH>:/home/bentoml/bento/src/logs` 其中 `<LOG PATH>` 是本機存放 logs 檔案的目錄。移動至該目錄即可查看log ![](https://i.imgur.com/Jcdq8s8.png) ## 常見問題排除 出現問題時,會回傳下列訊息格式 ```json { "id": <this_prediction_uuid>, "message": "Error happen in stage : <process_stage>. Tracing Exception: <e>" } ``` 其中,**`<this_prediction_uuid>`**, **`<process_stage>`** 與 **`<e>`** 分別為 **該筆資料對應的 ID**,**發生錯誤所在階段** 與 **對應的錯誤訊息**,程式做預測共分為下列 4 個階段: + **`RawDataProcess`**: 資料前處理階段,會對 Sepsis 資料與 NIS 資料做一系列的處理,包含資料表連接、資料清洗、計算 NIS 特徵等操作。 + **`BentoRunnerInference`**:將 **`RawDataProcess`** 階段處理過後的資料放入 XGBoost 模型做四個任務(帶藥回家,死亡,一般病房,ICU)機率值預測的階段。 + **`ShapValueCalc`**:分別計算四個任務各特徵所對應 shap 值的階段。 + **`OrganizeResult`**:將 **`BentoRunnerInference`** 與 **`ShapValueCalc`** 階段的計算結果整理成醫院需要的回傳格式的階段,回傳格式詳見 **`輸入輸出格式.md`** 中 Output 格式部分。 各執行階段常見的錯誤訊息如下: #### **RawDataProcess** 1. `Invalid input! Input data missing {table_name} key`**(422)**:輸入資料缺少資料表,詳見 **`輸入輸出格式.md`** 中 Input 格式規範 1, 2。 2. `Invalid input! {table_name} table is empty.`**(422)**:輸入資料的 **`{table_name}`** 為空,詳見 **`輸入輸出格式.md`** 中 Input 格式規範 4。 3. `Fail to convert {table_name} json data to pandas Dataframe`**(422)**:輸入資料的 **`{table_name}`** 表所對應的資料格式錯誤,無法將其轉換為 **`pandas.DataFrame`**。 4. `{table_name} table missing columns: {missing_columns}`**(422)**:輸入資料的 **`{table_name}`** 表缺少 **`{missing_columns}`** 欄位,詳見 **`輸入輸出格式.md`** 中 Input 格式規範 5。 5. `Got empty dataframe after data cleaning. Please check feature values are in reasonable range!`**(422)**:輸入資料的年齡欄位(AGE)超出合理範圍,詳見 **`輸入輸出格式.md`** 中 Input 格式規範 7。 6. `Unexpect Exception happen, please check the input data.`**(400)**:輸入資料有誤,導致無法成功進行前處理,此錯誤通常不會發生,若發生,請檢查資料格式是否正確無誤,若資料沒有問題,請聯絡維運人員協助釐清。 #### BentoRunnerInference 1. `Unexpect Exception happen, please check the input data.`**(400)**:輸入資料有誤,導致模型無法正常預測,此錯誤通常不會發生,若發生,請檢查資料格式是否正確無誤,若資料沒有問題,請聯絡維運人員協助釐清。 #### ShapValueCalc 1. `Unexpect Exception happen, please check the input data.`**(400)**:輸入資料有誤,導致無法計算 shap 值,此錯誤通常不會發生,若發生,請檢查資料格式是否正確無誤,若資料沒有問題,請聯絡維運人員協助釐清。 #### OrganizeResult 1. `Unexpect Exception happen, please check the input data.`**(400)**:輸入資料有誤,導致無法計算 shap 值,此錯誤通常不會發生,若發生,請檢查資料格式是否正確無誤,若資料沒有問題,請聯絡維運人員協助釐清。 ## 其他維運相關內容 ## 壓力測試報告 測試機器 Macbook Pro 2019 intel core Docker 使用資源限制: 使用核心數 vCPU 4 使用記憶體 8GB 壓力測試 Response Time ![](https://i.imgur.com/ubta56T.png) 壓力測試 TPS ![](https://i.imgur.com/NSRfNgA.png)