
在機器學習專案中,部署模型是一個關鍵環節,確保模型可以在不同的環境中穩定運作非常重要。 Docker作為一個容器化平台,可以幫助我們將機器學習模型和它的所有依賴打包成容器,確保模型在各種環境下都能以一致的方式運作。
安裝Docker。
建構並訓練機器學習模型。
建立requirements.txt檔案列出依賴項。
編寫Dockerfile ,建構鏡像。
使用docker build建置映像。
使用docker run運行容器。
將映像推送到Docker Hub,實現共用。
首先,你需要在本機上安裝Docker。可以從Docker官方網站下載並安裝適合你作業系統的Docker版本。安裝完成後,可以透過執行以下命令檢查是否成功安裝:
docker --version
我們將以scikit-learn和Python為例,訓練一個簡單的機器學習模型並保存。這裡,我們使用Iris資料集訓練一個隨機森林分類器。
model.py :
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pickle
# 訓練並保存模型def train_model():
# 載入資料集 data = load_iris()
X, y = data.data, data.target
# 訓練模型 model = RandomForestClassifier()
model.fit(X, y)
# 保存模型 with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
print("模型已訓練並儲存為 model.pkl")
# 載入模型並進行預測def predict():
# 載入訓練好的模型 with open('model.pkl', 'rb') as f:
model = pickle.load(f)
# 預測的測試資料 test_data = [5.1, 3.5, 1.4, 0.2] # 範例特徵 prediction = model.predict([test_data])
print(f"預測結果: {test_data} => {int(prediction[0])}")
if __name__ == '__main__':
train_model()
predict()在這段程式碼中:
train_model()函數載入Iris資料集,訓練一個隨機森林分類器,並將訓練好的模型儲存為model.pkl 。
predict()函數載入已儲存的模型,並使用一個測試資料進行預測。
requirements.txt文件為了讓Docker容器能夠安裝專案所需的所有依賴,我們需要建立一個requirements.txt文件,列出Python庫相依性。在這個例子中,我們只需要scikit-learn 。
requirements.txt :
scikit-learn
Dockerfile是建置Docker 映像的腳本,它定義瞭如何配置和建置映像。以下是我們專案的Dockerfile範例:
Dockerfile :
# 使用Python基礎鏡像FROM python:3.11-slim # 設定容器內的工作目錄WORKDIR /app # 將requirements.txt和model.py檔案複製到容器中COPY requirements.txt requirements.txt COPY model.py model.py # 安裝依賴RUN pip install -r requirements.txt # 容器啟動時執行的指令CMD ["python", "model.py"]
FROM :指定基本鏡像,我們使用了python:3.11-slim ,它是一個輕量級的Python環境。
WORKDIR :設定工作目錄為/app ,後續命令將在此目錄下執行。
COPY :將requirements.txt和model.py檔案複製到容器中。
RUN :安裝requirements.txt中列出的依賴。
CMD :指定容器啟動時執行的指令,這裡是執行model.py 。
在終端機中進入Dockerfile所在的目錄,然後執行以下命令來建立Docker 映像:
docker build -t ml-model .
-t ml-model :為鏡像指定一個標籤(名字),這裡我們將其命名為ml-model 。
. :指示Dockerfile所在的目前目錄。
建置過程完成後,你將看到類似如下的輸出:
Successfully built <鏡像ID> Successfully tagged ml-model:latest
現在,你可以執行建置好的Docker 映像,並查看模型的輸出。使用以下命令啟動容器:
docker run ml-model
這將啟動容器並執行model.py腳本。你應該會看到類似以下的輸出:
模型已訓練並保存為 model.pkl 預測結果: [5.1, 3.5, 1.4, 0.2] => 0
如果你想將建置的Docker 映像共用給他人或團隊成員,可以將其推送到Docker Hub。
首先,你需要登入Docker Hub:
docker login
登入後,使用以下指令為映像打上標籤(標籤為yourdockerhubusername/ml-model ):
docker tag ml-model yourdockerhubusername/ml-model
然後,將映像推送到Docker Hub:
docker push yourdockerhubusername/ml-model
將yourdockerhubusername替換為你的Docker Hub 使用者名稱。
推送完成後,其他人可以透過以下命令拉取並運行你的鏡像:
docker pull yourdockerhubusername/ml-model docker run yourdockerhubusername/ml-model
透過使用Docker,我們可以將機器學習模型與所有依賴打包成一個容器,確保在任何環境中都能夠一致地運作。 Docker不僅能簡化模型的部署流程,還能確保在不同的開發、測試和生產環境之間的一致性,進而提高模型部署的可靠性和可維護性。