flask 部署_只需10分鐘!就能用Flask,Docker和Jenkins部署機器學習模型

摘要: 一杯茶的功夫部署完成機器學習模型!

dde4a1c2f6dd1cceea3f76340d341cd7.png

在生產環境中部署機器學習模型是數據工程中經常被忽視的領域。網上的大多數教程/博客都側重于構建、訓練和調整機器學習模型。如果它不能用于實際的預測,那么它又有什么用呢? 接下來了解一下有哪些部署選項吧:

評估選項

在生產中部署機器學習模型時,有多種選擇。其中一種流行的方法是使用Azure Machine Learning Studio等云服務設計和訓練模型,這些服務具有使用拖放工具構建和訓練模型的能力。此外,將這些模型作為Web服務發布只需點擊幾下即可。此類設置的附加優勢在于,該部署會隨著應用程序使用量的增加而自動擴展。

雖然短時間看起來很方便,但從長遠來看,這種設置可能會有問題。當我們想要將應用程序從第三方云平臺遷移并將其部署在我們的服務器上時,就有難度了。由于這些工具與其各自的云平臺緊密集成,因此這種設置不可移植。此外,隨著應用程序的擴展,云計算的成本可能是一個令人望而卻步的因素。

d7df35a49428ba90911f7e41754b6ec8.png

如果我們構建自定義REST-API作為機器學習模型的終點,則可以避免這些問題。特別是,本文將使用基于Python的Flask Web框架來為模型構建API,然后將這個flask應用程序整齊地集成到Docker映像中來進行部署。Docker顯然適合解決這個問題,因為應用程序的所有依賴項都可以打包在容器中,并且可以通過必要時刻簡單地部署更多容器來實現可伸縮性。這種部署架構本質上是可擴展的、成本有效的和便攜的。

b62c4fb8165ea265cba5a177ce4dc401.png

Docker:Docker是一種開源的容器化技術,允許開發人員將應用程序與依賴庫打包在一起,并將其與底層操作系統隔離開來。與VM不同,docker不需要每個應用程序的Guest虛擬機操作系統,因此可以維護輕量級資源管理系統。與容器相比,虛擬機更重量級,因此容器可以相對快速地旋轉,同時具有較低的內存占用,這有助于將來我們的應用程序和模型的可伸縮性。

58ef0e37d11c08d3eaf3b2ddc3a9d2df.png

Jenkins:Jenkins可能是最受歡迎的持續集成和持續交付工具,大約擁有1400個插件,可自動構建和部署項目。Jenkins提供了一個在其管道中添加GitHub web-hook的規定,這樣每次開發人員將更改推送到GitHub存儲庫時,它都會自動開始為修改后的模型運行驗證測試,并構建docker鏡像來進行部署。

ngrok:ngrok是一個免費工具,可將公共URL傳送到本地運行的應用程序它會生成一個可以在GitHub web-hook中用于觸發推送事件的URL。

Flask:Flask是一個用Python編寫的開源Web框架,內置開發服務器和調試器。雖然有許多可以替代Web框架來創建REST API,但Flask的簡單性備受青睞。

部署

你可能想知道“我進入了什么樣的環狀土地?”但我保證接下來的步驟將變得簡單實用。到目前為止,我們已經了解了部署體系結構中的不同組件以及每個組件的功能的簡要說明。在本節中,將介紹部署模型的詳細步驟。

3b95d1ba29001a0a20d21eeeba0973b8.png

部署過程可以暫時分為四個部分:構建和保存模型、使用REST API公開模型,將模型打包在容器內以及配置持續集成工具。

在繼續下一步之前,使用以下命令將GitHub存儲庫復制到本地計算機。 此存儲庫包含所有代碼文件,可用作部署自定義模型的參考。

git clone git@github.com:EkramulHoque/docker-jenkins-flask-tutorial.git

注:雖然以上提到的步驟適用于Windows操作系統,但修改這些命令以在Mac或Unix系統上運行應該是很簡單的。

訓練和保存模型

在本例中,使用來自scikit-learn的鳶尾花數據集來構建我們的機器學習模型。在加載數據集后,提取用于模型訓練的特征(x)和目標(y)。為了進行預測,先創建一個名為“labels”的字典,其中包含目標的標簽名稱,這里將決策樹分類器用作模型。你可以在sklearn隨意嘗試其他分類器 ,通過調用模型上的方法來生成測試數據的預測標簽。

我們使用pickle庫將模型導出為pickle文件,并將模型保存在磁盤上。從文件加載模型后,我們將樣本數據作為模型的輸入并預測其目標變量。

#!/usr/bin/env python# coding: utf-8import picklefrom sklearn import datasetsiris=datasets.load_iris()x=iris.datay=iris.target#labels for iris datasetlabels ={ 0: "setosa

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539143.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539143.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hive 導入CSV文件

SerDe 介紹 Hive 使用如下FileFormat 類讀寫 HDFS files: TextInputFormat/HiveIgnoreKeyTextOutputFormat: 讀寫普通HDFS文本文件. SequenceFileInputFormat/SequenceFileOutputFormat: 讀寫SequenceFile格式的HDFS文件. Hive 使用如下SerDe 類(反)序列化數據: MetadataTyp…

騰訊云mysql架構_一個數據庫存儲架構的獨白

本文由云社區發表本文作者:許中清,騰訊云自研數據庫CynosDB的分布式存儲CynosStore負責人。從事數據庫內核開發、數據庫產品架構和規劃。曾就職于華為,2015年加入騰訊,參與過TBase(PGXZ)、CynosDB等數據庫產品研發。專注于關系數據…

Hive高級函數

Hive的函數太多了。用法和sql的差不多。 簡單查詢 select ... from...where... 使用各種函數 hive>show functions;//查看所有函數 hive>describe function explode;//查看函數的使用方法 LIMIT語句 列別名 嵌套select語句 標準函數: reverse() upper() ...…

groupby索引有效嗎_SQL IN 一定走索引嗎?

摘要IN 一定走索引嗎?那當然了,不走索引還能全部掃描嗎?好像之前有看到過什么Exist,IN走不走索引的討論。但是好像看的太久了,又忘記了。哈哈,如果你也忘記了MySQL中IN是如何查詢的,就來復習下吧。問題問題…

mysql函數使用場景_mysql的函數和存儲過程的比較,以及在實際場景中的使用案例...

一.存儲過程和函數的區別函數調用有返回值存儲過程調用用call語句,函數調用直接飲用函數名參數IN,OUT,INOUT只適用于存儲過程,對函數而言所有參數默認都是輸入參數IN用于把數值傳入到存儲過程中OUT用于輸出參數將數值傳遞給調用者…

hive性能調優

原文:http://www.tuicool.com/articles/rMvQvm ---------------------------------------------------------------------- limit 限制調整 -- 因為使用 limit 語句時候,是先執行整個查詢語句,然后再返回部分結果的 set hive.limit.optimize…

推薦系統之 BPR 算法及 Librec的BPR算法實現【1】

【推薦系統之 BPR 算法】 1、關于BPR的論文原文: BPR: Bayesian Personalized Ranking from Implicit Feedback 2、參考1:論文快讀 - BPR: Bayesian Personalized Ranking from Implicit Feedback (該博主的網站不錯,尤其論文快…

ios 篩選_萬千網友讓quot;低調使用quot;的軟件!居然還支持iOS

點擊藍字關注我們昨天的耳朵神器大家感覺怎么樣?享受了耳朵今天我們享受一下眼睛~可能很多同學對漫畫是情有獨鐘但是,之前小黑一直介紹的都是安卓端的軟件今天要給大家介紹的這款軟件是IOS安卓都有終于可以不被IOS的同學吐槽了而且經過測試小黑真的想說一…

Linux卸載/刪除多余網卡

卸載 使用命令ifconfig命令查看網卡情況 確認自己使用的是哪一塊網卡,然后把其它的網卡都卸載掉。 運行命令ifconfig 網卡名稱 down。 如: ifconfig eth1 down 再次運行ifconfig就會發現被卸載掉的網卡沒了。現在可以ping 一下內網的IP試試看能不能pin…

CentOS7:JDK1.7.0_80安裝

一、安裝前檢查 執行以下命令: rpm -qa | grep jdk 查看系統是否已經自帶openjdk,如果存在 執行以下命令: yum -y remove files files為查出的、系統自帶的openjdk相關文件,運行以上命令將相關文件卸載 執行命令 java -version[rootlocalhost…

python海龜繪圖畫圣誕帽男人_python海龜繪圖實例教程

本文以實例形式介紹了python turtle模塊即海龜繪圖的使用方法,對于需要進行圖形編程的朋友相信會有一定的借鑒價值。python turtle模塊簡介:python2.6版本中引入的一個簡單的繪圖工具,叫做海龜繪圖(turtle graphics)1.使用海龜繪圖首先我們需…

spring+mybatis 多數據源整合

原文&#xff1a;http://blog.csdn.net/fhx007/article/details/12530735 ---------------------------------------------------------------------------------- 直接看spring的配置吧 <!-- 數據源配置 --> <bean id"ds1" class"org.apache.commo…

四管前級怎么去掉高低音音調_一些歌曲音調太高怎么才能唱上去??

展開全部首先得提高肺活量 然后就是練聲&#xff01;怎 樣 練 聲&#xff1a;練聲的目的1&#xff0c;使歌唱發聲系統各器官的肌肉更e68a84e8a2ad62616964757a686964616f31333236373231有力&#xff0c;并能協調一致。2&#xff0c;建立正確的聲音概念。3&#xff0c;擴展音域&…

python繪制星空_用python畫星空源代碼是什么?

用python畫星空源代碼是什么&#xff1f;用python畫星空源代碼是from turtle import *from random import random,randintscreen Screen()width ,height 800,600screen.setup(width,height)screen.title("模擬3D星空")screen.bgcolor("black")screen.mod…

Linux - xshell上傳文件報錯亂碼

xshell上傳文件報錯亂碼&#xff0c;解決方法 rz -be 回車 下載sz filename轉載于:https://www.cnblogs.com/RzCong/p/8600899.html

java元數據是什么_用存儲過程和 JAVA 寫報表數據源有什么弊端?

用存儲過程和 JAVA 寫報表數據源有什么弊端&#xff1f;跟著小編一起來一看一下吧&#xff01;我們在報表開發中經常會使用存儲過程準備數據&#xff0c;存儲過程支持分步計算&#xff0c;可以實現非常復雜的計算邏輯&#xff0c;為報表開發帶來便利。所以&#xff0c;報表開發…

mysql多實例安裝啟動_MySQL多實例安裝啟動

Tips&#xff1a;之前我們的一個實例是mysql3306&#xff0c;我們現在再安裝一個mysql33071。和之前一樣&#xff0c;創建需要的目錄文件夾mkdir -p /data/mysql/mysql3307/{data,logs,tmp}創建完 就給文件授權chown -R mysql:mysql /data/mysql/mysql3307/2.進入mysql3307cd /…

用vhdl實現4位加減法計數器_32位加減法器設計

功能特性設計思路基于一位全加器&#xff0c;設計32位并行加法器。并行加法器中全加器的位數與操作數相同&#xff0c;影響速度&#xff08;延時&#xff09;的主要因素是進位信號的傳遞。主要的高速加法器【1】有基本上都是在超前進位加法器&#xff08;CLA&#xff09;的基礎…

用vim + xdebug 來追蹤thinkphp的執行過程

tree命令的使用幾個有實際應用的參數 -a 這是默認的 -d: 只顯式目錄, 不需要顯式目錄下的文件 -L: 列出顯式的深度. 當前目錄下的所有東西為第一級...在tp下, 有多個Common但是它們的含義不同:Application|- Common (前后臺都使用的公共文件所在目錄)|- Common (公共函數目錄)…

mybatis 中#與$的區別

MyBatis/Ibatis中#和$的區別 #{} 解析的是占位符&#xff1f;可以防止SQL注入&#xff0c;比如打印出來的語句 select * from table where id? 然而${} 則是不能防止SQL注入打印出來的語句 select * from table where id2 實實在在的參數