譯者 | 布加迪
審校 | 重樓
部署機(jī)器學(xué)習(xí)模型與開發(fā)一樣重要,特別是在確保不同環(huán)境之間的一致性時。軟件版本或配置方面的變化/差異可能導(dǎo)致不一致的行為或意外錯誤。Docker將應(yīng)用程序連同其依賴項封裝到一個容器中,以確保它在任何地方都能一樣正常運行。它讓你可以簡化部署過程,并盡可能減少錯誤。

Docker簡述
Docker是一種開源平臺,它使開發(fā)人員能夠?qū)?yīng)用程序連同其依賴項打包到一個容器中。這個容器是輕量級便攜式盒子,封裝了應(yīng)用程序運行所需的所有必要內(nèi)容(比如代碼、庫和設(shè)置)。容器將應(yīng)用程序與操作系統(tǒng)或配置方面的差異隔離開來,從而確保應(yīng)用程序在各種環(huán)境中一致地運行。此外,利用Docker可以簡化團(tuán)隊成員之間的協(xié)作,便于從開發(fā)環(huán)境更平滑地過渡到生產(chǎn)環(huán)境。
部署機(jī)器學(xué)習(xí)模型分步指南
不妨看看如何使用Docker部署機(jī)器學(xué)習(xí)模型。
1. 搭建環(huán)境
在開始之前,確保你已經(jīng)在系統(tǒng)上安裝了Docker。你可以從Docker官方網(wǎng)站下載。
2. 構(gòu)建機(jī)器學(xué)習(xí)模型
你需要準(zhǔn)備好部署一個經(jīng)過訓(xùn)練的機(jī)器學(xué)習(xí)模型。在本教程中,我們使用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()上面的示例在一個腳本中結(jié)合了模型訓(xùn)練、保存和預(yù)測。train_model()函數(shù)使用Iris數(shù)據(jù)集訓(xùn)練一個簡單模型,并將其保存為“model.pkl”。predict()函數(shù)加載保存的模型,并使用預(yù)定義的測試數(shù)據(jù)進(jìn)行預(yù)測。
3. 創(chuàng)建requirements.txt文件
在該文件中列出你的應(yīng)用程序需要的所有Python依賴項。在本例中:
requirements.txt:
scikit-learn4. 創(chuàng)建Dockerfile
Dockerfile是一個腳本,含有用于構(gòu)建Docker鏡像的一系列指令。
下面是我們應(yīng)用程序的簡單Dockerfile。確保該Dockerfile創(chuàng)建時沒有擴(kuò)展名,因為它允許Docker在構(gòu)建鏡像時不需要任何額外的參數(shù)就能識別它。
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"]現(xiàn)在不妨了解Dockerfile中每個關(guān)鍵字的含義。
- FROM:指定了Dockerfile的基本鏡像。我們在本例中使用了Python 3.11-slim。
- WORKDIR:將工作目錄設(shè)置為特定的路徑。此后,所有命令將相對該目錄加以執(zhí)行。
- COPY:這個命令將內(nèi)容從本地機(jī)器復(fù)制到Docker容器。這里,它復(fù)制了requirements.txt和model.py文件。
- RUN:它是鏡像的環(huán)境中的shell內(nèi)執(zhí)行命令。這里,它在安裝requirements.txt文件中列出了所有項目依賴項。
- CMD:該命令指定容器啟動時運行的默認(rèn)命令。在本例中,它使用Python運行model.py腳本。
5. 構(gòu)建Docker鏡像
打開命令提示或終端,進(jìn)入到Dockerfile所在的工作目錄,然后運行以下命令:
docker build -t ml-model這個命令使用當(dāng)前目錄構(gòu)建一個名為ml-model的Docker鏡像。
6. 運行Docker容器
一旦構(gòu)建了Docker鏡像,我們終于準(zhǔn)備好了運行容器。運行如下命令:
docker run ml-model輸出如下:
Model trained and saved as model.pkl
Prediction for [5.1, 3.5, 1.4, 0.2]: 07. 標(biāo)記容器,并將容器推送到DockerHub
Docker Hub是Docker鏡像的存儲庫,方便用戶在團(tuán)隊或生產(chǎn)環(huán)境之間共享、版本控制和分發(fā)容器。
在Docker Hub上創(chuàng)建一個帳戶。創(chuàng)建完畢后,運行以下命令通過終端登錄帳戶。
docker login你必須用用戶名標(biāo)記Docker鏡像,以便它知道將鏡像推送到哪里。替換你的用戶名,執(zhí)行以下命令:
docker tag ml-model yourdockerhubusername/ml-model一旦鏡像已標(biāo)記完畢,你就可以使用以下命令將鏡像推送到Docker Hub。
docker push yourdockerhubusername/ml-model現(xiàn)在誰都可以拉取并運行你的Docker鏡像了,只需運行以下命令:
docker pull yourdockerhubusername/ml-model
docker run yourdockerhubusername/ml-model結(jié)論
使用Docker部署機(jī)器學(xué)習(xí)模型保證跨不同平臺擁有一致的環(huán)境和依賴項,從而使部署過程更順暢、更具可擴(kuò)展性。本教程探討了使用Docker構(gòu)建、打包和部署機(jī)器學(xué)習(xí)模型的步驟,強(qiáng)調(diào)了其簡單性。
有了Docker,模型部署來得更直接簡單,從而不需要搭建復(fù)雜環(huán)境。
原文標(biāo)題:Step-by-Step Guide to Deploying ML Models with Docker,作者:Kanwal Mehreen































