譯者 | 布加迪
審校 | 重樓
部署機器學習模型與開發一樣重要,特別是在確保不同環境之間的一致性時。軟件版本或配置方面的變化/差異可能導致不一致的行為或意外錯誤。Docker將應用程序連同其依賴項封裝到一個容器中,以確保它在任何地方都能一樣正常運行。它讓你可以簡化部署過程,并盡可能減少錯誤。
Docker簡述
Docker是一種開源平臺,它使開發人員能夠將應用程序連同其依賴項打包到一個容器中。這個容器是輕量級便攜式盒子,封裝了應用程序運行所需的所有必要內容(比如代碼、庫和設置)。容器將應用程序與操作系統或配置方面的差異隔離開來,從而確保應用程序在各種環境中一致地運行。此外,利用Docker可以簡化團隊成員之間的協作,便于從開發環境更平滑地過渡到生產環境。
部署機器學習模型分步指南
不妨看看如何使用Docker部署機器學習模型。
1. 搭建環境
在開始之前,確保你已經在系統上安裝了Docker。你可以從Docker官方網站下載。
2. 構建機器學習模型
你需要準備好部署一個經過訓練的機器學習模型。在本教程中,我們使用scikit-learn和Python舉一個簡單的示例。
model.py:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pickle
# Train and save the model
def train_model():
# Load dataset
data = load_iris()
X, y = data.data, data.target
# Train model
model = RandomForestClassifier()
model.fit(X, y)
# Save the trained model
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
print("Model trained and saved as model.pkl")
# Load model and make a prediction using predefined test data
def predict():
# Load the saved model
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
# Test data (sample input for prediction)
test_data = [5.1, 3.5, 1.4, 0.2] # Example features
prediction = model.predict([test_data])
print(f"Prediction for {test_data}: {int(prediction[0])}")
if __name__ == '__main__':
train_model()
predict()
上面的示例在一個腳本中結合了模型訓練、保存和預測。train_model()函數使用Iris數據集訓練一個簡單模型,并將其保存為“model.pkl”。predict()函數加載保存的模型,并使用預定義的測試數據進行預測。
3. 創建requirements.txt文件
在該文件中列出你的應用程序需要的所有Python依賴項。在本例中:
requirements.txt:
scikit-learn
4. 創建Dockerfile
Dockerfile是一個腳本,含有用于構建Docker鏡像的一系列指令。
下面是我們應用程序的簡單Dockerfile。確保該Dockerfile創建時沒有擴展名,因為它允許Docker在構建鏡像時不需要任何額外的參數就能識別它。
Dockerfile:
# Use a base image with Python
FROM python:3.11-slim
# Set the working directory in the container
WORKDIR /app
# Copy the necessary files into the container
COPY requirements.txt requirements.txt
COPY model.py model.py
# Install the required Python libraries
RUN pip install -r requirements.txt
# Run the Python script when the container starts
CMD ["python", "model.py"]
現在不妨了解Dockerfile中每個關鍵字的含義。
- FROM:指定了Dockerfile的基本鏡像。我們在本例中使用了Python 3.11-slim。
- WORKDIR:將工作目錄設置為特定的路徑。此后,所有命令將相對該目錄加以執行。
- COPY:這個命令將內容從本地機器復制到Docker容器。這里,它復制了requirements.txt和model.py文件。
- RUN:它是鏡像的環境中的shell內執行命令。這里,它在安裝requirements.txt文件中列出了所有項目依賴項。
- CMD:該命令指定容器啟動時運行的默認命令。在本例中,它使用Python運行model.py腳本。
5. 構建Docker鏡像
打開命令提示或終端,進入到Dockerfile所在的工作目錄,然后運行以下命令:
docker build -t ml-model
這個命令使用當前目錄構建一個名為ml-model的Docker鏡像。
6. 運行Docker容器
一旦構建了Docker鏡像,我們終于準備好了運行容器。運行如下命令:
docker run ml-model
輸出如下:
Model trained and saved as model.pkl
Prediction for [5.1, 3.5, 1.4, 0.2]: 0
7. 標記容器,并將容器推送到DockerHub
Docker Hub是Docker鏡像的存儲庫,方便用戶在團隊或生產環境之間共享、版本控制和分發容器。
在Docker Hub上創建一個帳戶。創建完畢后,運行以下命令通過終端登錄帳戶。
docker login
你必須用用戶名標記Docker鏡像,以便它知道將鏡像推送到哪里。替換你的用戶名,執行以下命令:
docker tag ml-model yourdockerhubusername/ml-model
一旦鏡像已標記完畢,你就可以使用以下命令將鏡像推送到Docker Hub。
docker push yourdockerhubusername/ml-model
現在誰都可以拉取并運行你的Docker鏡像了,只需運行以下命令:
docker pull yourdockerhubusername/ml-model
docker run yourdockerhubusername/ml-model
結論
使用Docker部署機器學習模型保證跨不同平臺擁有一致的環境和依賴項,從而使部署過程更順暢、更具可擴展性。本教程探討了使用Docker構建、打包和部署機器學習模型的步驟,強調了其簡單性。
有了Docker,模型部署來得更直接簡單,從而不需要搭建復雜環境。
原文標題:Step-by-Step Guide to Deploying ML Models with Docker,作者:Kanwal Mehreen