---
# System prepended metadata

title: 二階段敗血症安裝
tags: [二階段敗血症]

---

# 二階段敗血症安裝

###### 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)

