偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

人工智能的實(shí)力:利用Docker簡(jiǎn)化機(jī)器學(xué)習(xí)應(yīng)用程序的部署和可擴(kuò)展性

譯文
人工智能 機(jī)器學(xué)習(xí)
利用Docker的強(qiáng)大功能,可以簡(jiǎn)化部署解決方案,確??蓴U(kuò)展性,簡(jiǎn)化機(jī)器學(xué)習(xí)模型的持續(xù)集成(CI)/持續(xù)交付(CD)流程。

譯者 | 李睿

審校 | 重樓

近年來,機(jī)器學(xué)習(xí)的應(yīng)用出現(xiàn)了爆炸式增長(zhǎng),導(dǎo)致對(duì)健壯、可擴(kuò)展和高效部署方法的需求快速增長(zhǎng)。由于訓(xùn)練和服務(wù)環(huán)境之間的差異或擴(kuò)大規(guī)模的困難等因素,傳統(tǒng)方法通常需要幫助運(yùn)營(yíng)機(jī)器學(xué)習(xí)模型。

本文提出了一種使用Docker的技術(shù)Docker是一個(gè)開源平臺(tái),旨在自動(dòng)化應(yīng)用程序的部署、擴(kuò)展和管理,以此來解決這些挑戰(zhàn)。所提出的方法將機(jī)器學(xué)習(xí)型及其環(huán)境封裝到一個(gè)標(biāo)準(zhǔn)化的Docker容器單元中。Docker容器提供了許多好處,包括開發(fā)和生產(chǎn)環(huán)境之間的一致性、易于擴(kuò)展以及部署的簡(jiǎn)單性。

本文對(duì)Docker及其在機(jī)器學(xué)習(xí)模型部署中的作用進(jìn)行深入探討,并對(duì)使用Docker部署機(jī)器學(xué)習(xí)模型進(jìn)行實(shí)際演示,從創(chuàng)建Dockerfile到使用Docker Swarm擴(kuò)展模型,所有這些都以相關(guān)代碼片段為例。此外,還介紹Docker在持續(xù)集成(CI)/持續(xù)交付(CD)管道中的集成,最終得出使用Docker進(jìn)行高效機(jī)器學(xué)習(xí)模型部署的結(jié)論和最佳實(shí)踐。

Docker是什么?

作為一個(gè)平臺(tái),Docker在輕量級(jí)、可移植的容器中自動(dòng)化軟件應(yīng)用程序的部署、擴(kuò)展和運(yùn)營(yíng)。Docker的基礎(chǔ)圍繞著“容器化”的概念。這種虛擬化方法允許將軟件及其整個(gè)運(yùn)行時(shí)環(huán)境打包成一個(gè)用于軟件開發(fā)的標(biāo)準(zhǔn)化單元。

Docker容器封裝了應(yīng)用程序運(yùn)行所需的一切(包括庫(kù)、系統(tǒng)工具、代碼和運(yùn)行時(shí)),并確保它在不同的計(jì)算環(huán)境中表現(xiàn)一致。這有助于快速可靠地構(gòu)建、測(cè)試和部署應(yīng)用程序,使Docker成為軟件開發(fā)和運(yùn)營(yíng)(DevOps)的關(guān)鍵工具。

當(dāng)談到機(jī)器學(xué)習(xí)應(yīng)用程序時(shí),Docker帶來了幾個(gè)優(yōu)勢(shì)。Docker的容器化特性確保了機(jī)器學(xué)習(xí)模型的訓(xùn)練和服務(wù)環(huán)境之間的一致性,降低了由于環(huán)境差異而遇到差異的風(fēng)險(xiǎn)。Docker還簡(jiǎn)化了擴(kuò)展過程,允許在多個(gè)服務(wù)器上輕松部署機(jī)器學(xué)習(xí)模型的多個(gè)實(shí)例。這些特性具有顯著簡(jiǎn)化機(jī)器學(xué)習(xí)模型部署和降低相關(guān)運(yùn)營(yíng)復(fù)雜性的潛力。

為什么要將機(jī)器學(xué)習(xí)應(yīng)用程序Docker化?

在機(jī)器學(xué)習(xí)應(yīng)用程序的背景下,Docker提供了許多好處,每一個(gè)都對(duì)運(yùn)營(yíng)效率和模型性能做出了重大貢獻(xiàn)。

首先,Docker容器提供的一致性環(huán)境確保了開發(fā)、測(cè)試和生產(chǎn)階段之間的差異最小化。這種一致性消除了“它工作在我的機(jī)器上”的問題,使其成為部署機(jī)器學(xué)習(xí)模型的首選,機(jī)器學(xué)習(xí)模型對(duì)其運(yùn)營(yíng)環(huán)境的變化特別敏感。

其次,Docker擅長(zhǎng)于促進(jìn)可擴(kuò)展性。機(jī)器學(xué)習(xí)應(yīng)用程序通常需要運(yùn)行同一模型的多個(gè)實(shí)例來處理大量數(shù)據(jù)或高請(qǐng)求率。Docker通過允許快速高效地部署多個(gè)容器實(shí)例來實(shí)現(xiàn)水平擴(kuò)展,使其成為擴(kuò)展機(jī)器學(xué)習(xí)模型的有效解決方案。

最后,Docker容器是獨(dú)立運(yùn)行的,這意味著它們有自己的運(yùn)行時(shí)環(huán)境,包括系統(tǒng)庫(kù)和配置文件。這種隔離提供了額外的安全層,確保每個(gè)機(jī)器學(xué)習(xí)模型在受控和安全的環(huán)境中運(yùn)行。Docker提供的一致性、可擴(kuò)展性和隔離性使其成為部署機(jī)器學(xué)習(xí)應(yīng)用程序的具有吸引力的平臺(tái)。

為機(jī)器學(xué)習(xí)設(shè)置Docker

以下重點(diǎn)介紹在機(jī)器學(xué)習(xí)應(yīng)用程序中使用Docker所需的初始設(shè)置。由于操作系統(tǒng)不同,Docker的安裝過程略有不同。對(duì)于Linux發(fā)行版,Docker通常通過命令行界面安裝,而對(duì)于Windows和MacOS, Docker Desktop版本可用。在每種情況下,Docker網(wǎng)站都提供了簡(jiǎn)單易懂的詳細(xì)安裝說明。通過從Docker Hub(一個(gè)基于云的注冊(cè)表服務(wù),允許開發(fā)人員共享應(yīng)用程序或庫(kù))中提取Docker鏡像,安裝成功。作為示例,可以使用以下命令提取最新的Python圖像以用于機(jī)器學(xué)習(xí)應(yīng)用程序:

Shell 
docker pull python:3.8-slim-buster

隨后,從提取的映像運(yùn)行Docker容器涉及Docker run命令。例如,如果需要交互式Python shell,則可以使用以下命令:

Shell 
docker run -it python:3.8-slim-buster /bin/bash

該命令啟動(dòng)一個(gè)帶有交互式終端(-it)的Docker容器,并在Python容器中提供一個(gè)shell (/bin/bash)。通過遵循這個(gè)過程,Docker可以有效地幫助部署機(jī)器學(xué)習(xí)模型。

為簡(jiǎn)單的機(jī)器學(xué)習(xí)模型創(chuàng)建Dockerfile

Docker操作簡(jiǎn)單性的核心是Dockerfile,它是一個(gè)文本文檔,包含了組裝Docker映像所需的所有命令。用戶可以通過Docker命令行執(zhí)行Dockerfile來自動(dòng)創(chuàng)建鏡像。

Dockerfile由一組指令和參數(shù)組成,這些指令和參數(shù)以連續(xù)的行排列。指令是Docker命令,例如FROM(指定基本鏡像)、RUN(執(zhí)行命令)、COPY(將文件從主機(jī)復(fù)制到Docker鏡像)和CMD(為執(zhí)行容器提供默認(rèn)值)。

以使用Scikit learn的線性回歸算法構(gòu)建的一個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)模型為例。此類應(yīng)用程序的Dockerfile可能如下所示:

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"]

這個(gè)Dockerfile中提到的requirements.txt文件列出了機(jī)器學(xué)習(xí)模型的所有Python依賴項(xiàng),例如Scikit-learn、Pandas和Flask。另一方面,app.py腳本包含加載經(jīng)過訓(xùn)練的模型并將其用作Web應(yīng)用程序的代碼。

通過在Dockerfile中定義配置和依賴關(guān)系,可以創(chuàng)建一個(gè)映像,其中包含機(jī)器學(xué)習(xí)模型及其執(zhí)行所需的運(yùn)行時(shí)環(huán)境,從而促進(jìn)一致的部署。

構(gòu)建和測(cè)試Docker鏡像

在成功創(chuàng)建Dockerfile之后,接下來的階段包括構(gòu)建Docker映像。通過執(zhí)行Docker build命令構(gòu)建Docker鏡像,然后執(zhí)行包含Docker文件的目錄。-t標(biāo)志用指定的名稱標(biāo)記圖像。這樣一個(gè)命令的實(shí)例是:

Shell 
 docker build -t ml_model_image:1.0 

在這里,ml_model_image:1.0是分配給圖像的名稱和版本,而“.”表示Dockerfile駐留在當(dāng)前目錄中。

在構(gòu)建Docker鏡像之后,下面的任務(wù)涉及從該鏡像啟動(dòng)Docker容器,從而允許測(cè)試機(jī)器學(xué)習(xí)模型的功能。Docker的run命令可以幫助完成這個(gè)任務(wù):

Shell 
 docker run -p 4000:80 ml_model_image:1.0

在這個(gè)命令中,-p標(biāo)志將主機(jī)的端口4000映射到容器的端口80(在Dockerfile中定義)。因此,機(jī)器學(xué)習(xí)模型可以通過主機(jī)的4000端口訪問。

測(cè)試模型需要向Docker容器中的Flask應(yīng)用程序公開的端點(diǎn)發(fā)送一個(gè)請(qǐng)求。例如,如果模型基于POST請(qǐng)求發(fā)送的數(shù)據(jù)提供預(yù)測(cè),curl命令可以促進(jìn)這一點(diǎn):

Shell 
 curl -d '{"data":[1, 2, 3, 4]}' -H 'Content-Type: application/json' http://localhost:4000/predict

該方法確保了從Dockerfile創(chuàng)建到在Docker容器中測(cè)試機(jī)器學(xué)習(xí)模型的無縫流程。

使用Docker部署機(jī)器學(xué)習(xí)模型

機(jī)器學(xué)習(xí)模型的部署通常涉及將模型公開為可通過互聯(lián)網(wǎng)訪問的服務(wù)。實(shí)現(xiàn)這一目標(biāo)的標(biāo)準(zhǔn)方法是使用Web框架(如Flask)將模型作為REST API提供服務(wù)。

考慮一個(gè)Flask應(yīng)用程序封裝機(jī)器學(xué)習(xí)模型的例子。以下的Python腳本演示了如何將模型作為REST API端點(diǎn)公開:

Python 
 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)

在這個(gè)例子中,F(xiàn)lask應(yīng)用程序加載了一個(gè)預(yù)訓(xùn)練的Scikit-learn模型(保存為model.pkl),并定義了一個(gè)API端點(diǎn)/predict。當(dāng)POST請(qǐng)求與包含特性數(shù)組的JSON對(duì)象一起發(fā)送到該端點(diǎn)時(shí),模型進(jìn)行預(yù)測(cè)并將其作為響應(yīng)返回。

一旦機(jī)器學(xué)習(xí)模型被部署并在Docker容器中運(yùn)行,它就可以使用HTTP請(qǐng)求進(jìn)行通信。例如,使用curl命令,一個(gè)POST請(qǐng)求可以發(fā)送到一個(gè)特征數(shù)組的模型,它將響應(yīng)一個(gè)預(yù)測(cè):

Shell 
 curl -d '{"features":[1, 2, 3, 4]}' -H 'Content-Type: application/json'
 http://localhost:4000/predict

這個(gè)實(shí)例演示了Docker如何將機(jī)器學(xué)習(xí)模型部署為可擴(kuò)展和可訪問的服務(wù)。

用Docker Swarm擴(kuò)展器學(xué)習(xí)模型

隨著機(jī)器學(xué)習(xí)應(yīng)用程序的范圍和用戶基礎(chǔ)的增長(zhǎng),擴(kuò)展能力變得越來越重要。Docker Swarm為Docker提供了一個(gè)本地集群和編排解決方案,允許多個(gè)Docker主機(jī)變成一個(gè)虛擬主機(jī)。因此,Docker Swarm可以用于跨多臺(tái)機(jī)器管理和擴(kuò)展部署的機(jī)器學(xué)習(xí)模型。

啟動(dòng)Docker Swarm是一個(gè)簡(jiǎn)單的過程,通過執(zhí)行“Docker Swarm init”命令開始。這個(gè)命令將當(dāng)前機(jī)器初始化為Docker Swarm管理器:

Shell 
 docker swarm init --advertise-addr $(hostname -i)

在這個(gè)命令中,--advertise-addr標(biāo)志指定工作節(jié)點(diǎn)可以到達(dá)Swarm管理器的地址。hostname-i命令檢索當(dāng)前機(jī)器的IP地址。

在初始化Swarm之后,機(jī)器學(xué)習(xí)模型可以使用Docker服務(wù)跨Swarm部署。該服務(wù)是用docker service create命令創(chuàng)建的,其中像-replicas這樣的標(biāo)志可以決定要運(yùn)行的容器實(shí)例的數(shù)量:

Shell 
 docker service create --replicas 3 -p 4000:80 --name ml_service ml_model_image:1.0

在這個(gè)命令中,--replica 3確保容器的三個(gè)實(shí)例在Swarm中運(yùn)行,-p 4000:80將Swarm的端口4000映射到容器的端口80,--name ml_service為服務(wù)分配一個(gè)名稱。

因此,通過實(shí)現(xiàn)Docker Swarm,部署的機(jī)器學(xué)習(xí)模型可以有效地跨多個(gè)Docker主機(jī)擴(kuò)展,從而增強(qiáng)其可用性和性能。

采用Docker的持續(xù)集成(CI)/持續(xù)交付(CD)

持續(xù)集成(CI)/持續(xù)交付(CD)是現(xiàn)代軟件開發(fā)的一個(gè)重要方面,促進(jìn)自動(dòng)化測(cè)試和部署,以確保軟件發(fā)布周期的一致性和速度。Docker的可移植性很適合持續(xù)集成(CI)/持續(xù)交付(CD)管道,因?yàn)镈ocker映像可以在管道中的不同階段進(jìn)行構(gòu)建、測(cè)試和部署。

一個(gè)將Docker集成到持續(xù)集成(CI)/持續(xù)交付(CD)管道中的例子可以用Jenkins管道來說明。管道在Jenkinsfile中定義,看起來像這樣:

Groovy 
 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'
 }
 }
 }
 }
 }

在這個(gè)Jenkinsfile中,構(gòu)建(Build)階段構(gòu)建Docker鏡像,測(cè)試(Test)階段運(yùn)行Docker容器并向機(jī)器學(xué)習(xí)模型發(fā)送請(qǐng)求以驗(yàn)證其功能,部署(Deploy)階段創(chuàng)建Docker服務(wù)并跨Docker Swarm進(jìn)行擴(kuò)展。

因此,借助Docker, 持續(xù)集成(CI)/持續(xù)交付(CD)管道可以實(shí)現(xiàn)可靠高效的機(jī)器學(xué)習(xí)模型部署。

結(jié)論和最佳實(shí)踐

最后,本文強(qiáng)調(diào)了Docker在簡(jiǎn)化機(jī)器學(xué)習(xí)模型部署方面的功效。Docker能夠?qū)⒛P图捌湟蕾囮P(guān)系封裝在一個(gè)獨(dú)立的、一致的、輕量級(jí)的環(huán)境中,這使得Docker成為機(jī)器學(xué)習(xí)從業(yè)者的一個(gè)強(qiáng)大工具。通過Docker Swarm和它與持續(xù)集成(CI)/持續(xù)交付(CD)管道的無縫集成,Docker在跨多臺(tái)機(jī)器擴(kuò)展機(jī)器學(xué)習(xí)模型的潛力進(jìn)一步增強(qiáng)了它的價(jià)值。

然而,為了從Docker中獲取最大的價(jià)值,推薦以下最佳實(shí)踐:

  • 最小化Docker鏡像大?。狠^小的鏡像使用更少的磁盤空間,減少構(gòu)建時(shí)間,并加快部署。這可以通過使用更小的基本映像、刪除不必要的依賴以及有效地利用Docker的層緩存來實(shí)現(xiàn)。
  • 使用.dokerignore:與Git中的.gitignore類似,.dokerignORE可以防止Docker鏡像中包含不必要的文件,從而減小其大小。
  • 確保Dockerfiles是可復(fù)制的:在將來構(gòu)建Docker鏡像時(shí),使用特定版本的基本鏡像和依賴可以防止意外的更改。

通過堅(jiān)持這些指南并充分利用Docker的功能,在部署機(jī)器學(xué)習(xí)模型的復(fù)雜性中導(dǎo)航變得更加可行,從而加快了從開發(fā)到生產(chǎn)的路徑。

參考文獻(xiàn)

1.Docker Official Documentation. Docker, Inc.

2.Docker for Machine Learning. O'Reilly Media, Inc.

3. Continuous Integration with Docker. Jenkins Documentation.

4.Scikit-learn: Machine Learning in Python. Scikit-learn Developers.

5.Kalade, S., Crockett, L. H., & Stewart, R. (2018). Using Sequence to Sequence Learning for Digital BPSK and QPSK Demodulation.

6.Blog — Page 3 — Liran Tal.

7.Introduction to the Dockerfile Part II | by Hakim | Medium.

8.Spring Boot 2.2 with Java 13 CRUD REST API Tutorial: Using JPA Hibernate & MySQL | Techiediaries

原文標(biāo)題:AI Prowess: Harnessing Docker for Streamlined Deployment and Scalability of Machine Learning Applications,作者:Rudrendu Kumar PaulBidyut Sarkar


責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2009-04-16 17:53:09

SQL Server 應(yīng)用程序擴(kuò)展性

2015-01-06 09:59:59

云應(yīng)用程序Java開發(fā)SQL

2021-09-02 09:42:11

測(cè)試軟件可擴(kuò)展性開發(fā)

2020-10-31 21:53:02

機(jī)器學(xué)習(xí)人工智能AI

2021-12-09 05:36:16

云存儲(chǔ)可擴(kuò)展性數(shù)據(jù)存儲(chǔ)云存儲(chǔ)

2023-10-11 13:46:26

緩存Web應(yīng)用程序

2017-01-05 19:29:10

公共云云存儲(chǔ)微軟

2022-09-05 15:17:34

區(qū)塊鏈比特幣可擴(kuò)展性

2023-05-29 15:58:25

機(jī)器學(xué)習(xí)人工智能

2023-09-15 10:01:04

2019-03-06 09:00:00

機(jī)器學(xué)習(xí)人工智能

2021-12-03 14:41:00

云存儲(chǔ)可擴(kuò)展性存儲(chǔ)

2024-10-10 14:01:34

2025-04-09 08:14:03

2018-05-15 10:42:44

應(yīng)用程序云計(jì)算開發(fā)

2021-05-17 07:28:23

Spring可擴(kuò)展性項(xiàng)目

2016-10-13 14:38:51

OpenStack可擴(kuò)展性IT人員

2021-07-29 09:55:40

人工智能AI深度學(xué)習(xí)

2022-04-07 14:37:37

人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)安全

2024-05-10 09:38:01

人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)