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