????????利用 Docker 的強大功能:簡化部署解決方案、確??蓴U展性并簡化機器學習模型的 CI/CD 流程。
????????近年來,機器學習 (ML) 出現(xiàn)了爆炸性增長,導致對健壯、可擴展且高效的部署方法的需求不斷增加。由于訓練和服務(wù)環(huán)境之間的差異或擴展的困難等因素,傳統(tǒng)方法通常需要幫助來操作機器學習模型。本文提出了一種使用 Docker 的技術(shù),Docker 是一個開源平臺,旨在自動化應用程序部署、擴展和管理,作為應對這些挑戰(zhàn)的解決方案。所提出的方法將機器學習模型及其環(huán)境封裝到標準化的 Docker 容器單元中。容器提供了許多好處,包括跨開發(fā)和生產(chǎn)環(huán)境的一致性、易于擴展以及部署簡單。以下部分深入探討了 Docker、它在 ML 模型部署中的作用,以及使用 Docker 部署 ML 模型的實際演示,從 Dockerfile 的創(chuàng)建到使用 Docker Swarm 擴展模型,所有這些都通過相關(guān)代碼片段。此外,還介紹了Docker 在持續(xù)集成/持續(xù)部署 (?CI/CD?) 管道中的集成,最后得出了使用 Docker 進行高效 ML 模型部署的結(jié)論和最佳實踐。
什么是 Docker??
????????作為一個平臺,Docker 可在輕量級、便攜式容器內(nèi)自動執(zhí)行軟件應用程序部署、擴展和操作。Docker 的基本基礎(chǔ)圍繞“容器化”的概念。這種虛擬化方法允許將軟件及其整個運行時環(huán)境打包到軟件開發(fā)的標準化單元中。
????????Docker 容器封裝了應用程序運行所需的所有內(nèi)容(包括庫、系統(tǒng)工具、代碼和運行時),并確保它在不同的計算環(huán)境中表現(xiàn)一致。這促進了快速可靠地構(gòu)建、測試和部署應用程序的過程,使 Docker 成為軟件開發(fā)和運營 (DevOps) 的重要工具。
????????當談到機器學習應用程序時,Docker 帶來了幾個優(yōu)勢。Docker 的容器化特性確保了 ML 模型的訓練和服務(wù)環(huán)境之間的一致性,從而降低了因環(huán)境差異而出現(xiàn)差異的風險。Docker 還簡化了擴展過程,允許在眾多服務(wù)器上輕松部署 ML 模型的多個實例。這些功能有可能顯著簡化機器學習模型的部署并降低相關(guān)的操作復雜性。
為什么要將機器學習應用程序 Docker 化??
????????在機器學習應用程序中,Docker 提供了眾多優(yōu)勢,每一項都對運營效率和模型性能做出了重大貢獻。
????????首先,Docker容器提供的一致環(huán)境確保了開發(fā)、測試和生產(chǎn)階段之間的差異最小。這種一致性消除了臭名昭著的“它可以在我的機器上運行”問題,使其成為部署機器學習模型的首選,因為機器學習模型對其操作環(huán)境的變化特別敏感。
????????其次,Docker 擅長促進可擴展性。機器學習應用程序通常需要運行同一模型的多個實例來處理大量數(shù)據(jù)或高請求率。Docker 通過允許快速高效地部署多個容器實例來實現(xiàn)水平擴展,使其成為擴展 ML 模型的有效解決方案。
????????最后,Docker 容器是隔離運行的,這意味著它們有自己的運行時環(huán)境,包括系統(tǒng)庫和配置文件。這種隔離提供了額外的安全層,確保每個機器學習模型在受控且安全的環(huán)境中運行。Docker 提供的一致性、可擴展性和隔離性使其成為部署機器學習應用程序的有吸引力的平臺。
為機器學習設(shè)置 Docker
????????本節(jié)重點介紹將 Docker 與機器學習應用程序結(jié)合使用所需的初始設(shè)置。Docker 的安裝過程根據(jù)所使用的操作系統(tǒng)略有不同。對于 Linux 發(fā)行版,Docker 通常通過命令行界面安裝,而對于 Windows 和 MacOS,則提供 Docker Desktop 版本。在每種情況下,Docker 網(wǎng)站都提供了易于遵循的詳細安裝說明。通過從 Docker Hub 拉取 Docker 映像來成功安裝,Docker Hub 是一種基于云的注冊表服務(wù),允許開發(fā)人員共享應用程序或庫。作為說明,可以使用以下命令提取最新的 Python 映像以用于機器學習應用程序:
docker pull python:3.8-slim-buster
隨后,從拉取的鏡像運行 Docker容器涉及到 docker run 命令。例如,如果需要交互式 Python shell,可以使用以下命令:
docker run -it python:3.8-slim-buster /bin/bash
????????此命令使用交互式終端 ( ) 啟動 Docker 容器,并在 Python 容器內(nèi)-it
提供 shell ( )。/bin/bash
通過遵循此流程,Docker 被有效地設(shè)置為協(xié)助部署機器學習模型。
為簡單的 ML 模型創(chuàng)建 Dockerfile
????????Docker 操作簡單性的核心是 Dockerfile,它是一個文本文檔,其中包含組裝 Docker 映像所需的所有命令。用戶可以通過 Docker 命令行執(zhí)行 Dockerfile 來自動化鏡像創(chuàng)建過程。
????????Dockerfile 由一組連續(xù)行排列的指令和參數(shù)組成。指令是 Docker 命令,例如FROM
(指定基礎(chǔ)映像)、RUN
(執(zhí)行命令)、COPY
(將文件從主機復制到 Docker 映像)和CMD
(提供執(zhí)行容器的默認值)。
????????考慮使用 Scikit-learn 的線性回歸算法構(gòu)建的簡單機器學習模型作為實際說明。此類應用程序的 Dockerfile 可能如下所示:
# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster
# Set the working directory in the container to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Run app.py when the container launches
CMD ["python", "app.py"]
????????此 Dockerfile 中提到的文件requirements.txt
列出了機器學習模型的所有 Python 依賴項,例如 Scikit-learn、Pandas 和 Flask。另一方面,該app.py
腳本包含加載經(jīng)過訓練的模型并將其用作 Web 應用程序的代碼。
????????通過在該 Dockerfile 中定義配置和依賴項,可以創(chuàng)建一個鏡像來容納機器學習模型及其執(zhí)行所需的運行時環(huán)境,從而促進一致的部署。
構(gòu)建和測試 Docker 鏡像
????????成功創(chuàng)建 Dockerfile 后,后續(xù)階段涉及構(gòu)建 Docker 映像。Docker 鏡像是通過執(zhí)行docker build
命令構(gòu)建的,后跟包含 Docker 文件的目錄。該-t
標志用指定的名稱標記圖像。此類命令的一個實例是:
docker build -t ml_model_image:1.0?
這里,ml_model_image:1.0
是分配給鏡像的名稱(和版本),而“?.
”表示 Dockerfile 位于當前目錄中。
構(gòu)建 Docker 映像后,以下任務(wù)涉及從此映像啟動 Docker 容器,從而測試機器學習模型的功能。該docker run
命令有助于實現(xiàn)這一目標:
docker run -p 4000:80 ml_model_image:1.0
在此命令中,該-p
標志將主機的端口 4000 映射到容器的端口 80(如 Dockerfile 中所定義)。因此,機器學習模型可以通過主機的4000端口訪問。
測試模型需要向 Docker 容器內(nèi) Flask 應用程序公開的端點發(fā)送請求。例如,如果模型根據(jù)通過 POST 請求發(fā)送的數(shù)據(jù)提供預測,則該curl
命令可以促進這一點:
curl -d '{"data":[1, 2, 3, 4]}' -H 'Content-Type: application/json' http://localhost:4000/predict
所提出的方法確保了從 Dockerfile 創(chuàng)建到在 Docker 容器內(nèi)測試 ML 模型的無縫流程。
使用 Docker 部署 ML 模型
機器學習模型的部署通常涉及將模型公開為可通過互聯(lián)網(wǎng)訪問的服務(wù)。實現(xiàn)此目標的標準方法是使用 Flask 等 Web 框架將模型作為 REST API 提供服務(wù)。
考慮一個 Flask 應用程序封裝機器學習模型的示例。以下 Python 腳本說明了如何將模型公開為 REST API 端點:
from flask import Flask, request
from sklearn.externals import joblib
app = Flask(__name__)
model = joblib.load('model.pkl')
@app.route('/predict', methods=['POST'])
def predict():
? ? data = request.get_json(force=True)
? ? prediction = model.predict([data['features']])
? ? return {'prediction': prediction.tolist()}
if __name__ == '__main__':
? ? app.run(host='0.0.0.0', port=80)
在此示例中,F(xiàn)lask 應用程序加載預先訓練的 Scikit-learn 模型(另存為model.pkl
)并定義單個 API 端點/predict
。當使用包含一組特征的 JSON 對象將 POST 請求發(fā)送到此端點時,模型會進行預測并將其作為響應返回。
一旦 ML 模型在 Docker 容器中部署并運行,就可以使用 HTTP 請求進行通信。例如,使用該curl
命令,可以將 POST 請求發(fā)送到具有一系列特征的模型,并且它將通過預測進行響應:
curl -d '{"features":[1, 2, 3, 4]}' -H 'Content-Type: application/json'
?http://localhost:4000/predict
這個實際示例演示了 Docker 如何促進將機器學習模型部署為可擴展且可訪問的服務(wù)。
使用 Docker Swarm 擴展 ML 模型
隨著機器學習應用程序范圍和用戶群的增長,擴展能力變得越來越重要。Docker Swarm 為 Docker 提供了原生集群和編排解決方案,允許將多個 Docker 主機變成單個虛擬主機。因此,Docker Swarm 可用于管理和擴展跨多臺機器部署的機器學習模型。
啟動 Docker Swarm 是一個簡單的過程,通過執(zhí)行“docker swarm init”命令開始。此命令將當前機器初始化為 Docker Swarm 管理器:
docker swarm init --advertise-addr $(hostname -i)
在此命令中,該--advertise-addr
標志指定工作節(jié)點可以訪問 Swarm 管理器的地址。該hostname -i?
命令檢索當前計算機的 IP 地址。
Swarm 初始化后,可以使用 Docker 服務(wù)在 Swarm 上部署機器學習模型。該服務(wù)是使用以下docker service create
命令創(chuàng)建的,其中類似的標志--replicas
可以指示要運行的容器實例的數(shù)量:
docker service create --replicas 3 -p 4000:80 --name ml_service ml_model_image:1.0
在此命令中,--replicas 3
確保容器的三個實例在 Swarm 上運行,-p 4000:80
將 Swarm 的端口 4000 映射到容器的端口 80,并--name ml_service
為服務(wù)分配一個名稱。
因此,通過實施 Docker Swarm,部署的機器學習模型可以跨多個 Docker 主機有效擴展,從而增強其可用性和性能。
使用 Docker 進行持續(xù)集成/持續(xù)部署 (CI/CD)
持續(xù)集成/持續(xù)部署(CI/CD)是現(xiàn)代軟件開發(fā)的重要方面,促進自動化測試和部署,以確保軟件發(fā)布周期的一致性和速度。Docker 的可移植性非常適合 CI/CD 管道,因為 Docker 映像可以在管道的各個階段構(gòu)建、測試和部署。
可以使用 Jenkins 管道來說明將 Docker 集成到 CI/CD 管道的示例。管道在 Jenkinsfile 中定義,可能如下所示:
pipeline {
? ? agent any
? ? stages {
? ? ? ? stage('Build') {
? ? ? ? ? ? steps {
? ? ? ? ? ? ? ? script {
? ? ? ? ? ? ? ? ? ? sh 'docker build -t ml_model_image:1.0 .'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? stage('Test') {
? ? ? ? ? ? steps {
? ? ? ? ? ? ? ? script {
? ? ? ? ? ? ? ? ? ? sh 'docker run -p 4000:80 ml_model_image:1.0'
? ? ? ? ? ? ? ? ? ? sh 'curl -d '{"features":[1, 2, 3, 4]}' -H 'Content-Type: application/json' http://localhost:4000/predict'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? stage('Deploy') {
? ? ? ? ? ? steps {
? ? ? ? ? ? ? ? script {
? ? ? ? ? ? ? ? ? ? sh 'docker service create --replicas 3 -p 4000:80 --name ml_service ml_model_image:1.0'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
在此 Jenkinsfile 中,該Build
階段構(gòu)建 Docker 映像,該Test
階段運行 Docker 容器并向機器學習模型發(fā)送請求以驗證其功能,該Deploy
階段創(chuàng)建 Docker 服務(wù)并將其擴展至 Docker Swarm。
因此,借助Docker,CI/CD管道可以實現(xiàn)機器學習模型的可靠、高效部署。
結(jié)論和最佳實踐
最后,本文強調(diào)了 Docker 在簡化機器學習模型部署方面的功效。將模型及其依賴項封裝在隔離、一致和輕量級環(huán)境中的能力使 Docker 成為機器學習從業(yè)者的強大工具。進一步增強其價值的是 Docker 通過 Docker Swarm 跨多臺機器擴展機器學習模型的潛力及其與 CI/CD 管道的無縫集成。
然而,為了從 Docker 中獲取最大價值,建議使用某些最佳實踐:文章來源:http://www.zghlxwxcb.cn/news/detail-648395.html
- 最小化 Docker 映像大?。?較小的映像使用較少的磁盤空間、減少構(gòu)建時間并加快部署速度。這可以通過使用較小的基礎(chǔ)映像、刪除不必要的依賴項并有效利用 Docker 的層緩存來實現(xiàn)。
- 使用 .dockerignore:?與 Git 中的 .gitignore 類似,.dockerignore 可以防止 Docker 鏡像中包含不必要的文件,從而減小其大小。
- 確保 Dockerfile 是可重現(xiàn)的:使用特定版本的基礎(chǔ)映像和依賴項可以防止將來構(gòu)建 Docker 映像時發(fā)生意外更改。
通過遵守這些準則并充分利用 Docker 的功能,解決部署機器學習模型的復雜性變得更加可行,從而加速從開發(fā)到生產(chǎn)的過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-648395.html
到了這里,關(guān)于AI 實力:利用 Docker 簡化機器學習應用程序的部署和可擴展性的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!