日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【实战】使用Python部署机器学习模型的10个实践经验

發布時間:2025/3/8 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【实战】使用Python部署机器学习模型的10个实践经验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:Pratik Bhavsar? ?編譯:ronghuaiyang

導讀

使用python部署ML項目的一些經驗。

有時候,作為數據科學家,我們會忘記公司付錢讓我們干什么。我們首先是開發人員,然后是研究人員,然后可能是數學家。我們的首要責任是快速開發無bug的解決方案。

我們能做模型并不意味著我們就是神。它沒有給我們寫垃圾代碼的自由。

從一開始,我就犯了很多錯誤,我想和大家分享一下我所看到的ML工程中最常見的技能。在我看來,這也是目前這個行業最缺乏的技能。

我稱他們為“軟件文盲”,因為他們中的很多人都是非計算機科學課程學習平臺(Coursera)的工程師。我自己曾經就是????

如果要在一個偉大的數據科學家和一個偉大的ML工程師之間招聘,我會選擇后者。讓我們開始吧。

1. 學會寫抽象類

一旦你開始編寫抽象類,你就會知道它能給你的代碼庫帶來多大的清晰度。它們執行相同的方法和方法名稱。如果很多人都在同一個項目上工作,每個人都會開始使用不同的方法。這可能會造成無效率的混亂。

import?os from?abc?import?ABCMeta,?abstractmethodclass?DataProcessor(metaclass=ABCMeta):"""Base?processor?to?be?used?for?all?preparation."""def?__init__(self,?input_directory,?output_directory):self.input_directory?=?input_directoryself.output_directory?=?output_directory@abstractmethoddef?read(self):"""Read?raw?data."""@abstractmethoddef?process(self):"""Processes?raw?data.?This?step?should?create?the?raw?dataframe?with?all?the?required?features.?Shouldn't?implement?statistical?or?text?cleaning."""@abstractmethoddef?save(self):"""Saves?processed?data."""class?Trainer(metaclass=ABCMeta):"""Base?trainer?to?be?used?for?all?models."""def?__init__(self,?directory):self.directory?=?directoryself.model_directory?=?os.path.join(directory,?'models')@abstractmethoddef?preprocess(self):"""This?takes?the?preprocessed?data?and?returns?clean?data.?This?is?more?about?statistical?or?text?cleaning."""@abstractmethoddef?set_model(self):"""Define?model?here."""@abstractmethoddef?fit_model(self):"""This?takes?the?vectorised?data?and?returns?a?trained?model."""@abstractmethoddef?generate_metrics(self):"""Generates?metric?with?trained?model?and?test?data."""@abstractmethoddef?save_model(self,?model_name):"""This?method?saves?the?model?in?our?required?format."""class?Predict(metaclass=ABCMeta):"""Base?predictor?to?be?used?for?all?models."""def?__init__(self,?directory):self.directory?=?directoryself.model_directory?=?os.path.join(directory,?'models')@abstractmethoddef?load_model(self):"""Load?model?here."""@abstractmethoddef?preprocess(self):"""This?takes?the?raw?data?and?returns?clean?data?for?prediction."""@abstractmethoddef?predict(self):"""This?is?used?for?prediction."""class?BaseDB(metaclass=ABCMeta):"""?Base?database?class?to?be?used?for?all?DB?connectors."""@abstractmethoddef?get_connection(self):"""This?creates?a?new?DB?connection."""@abstractmethoddef?close_connection(self):"""This?closes?the?DB?connection."""

2. 在最前面設置你的隨機數種子

實驗的可重復性是非常重要的,而種子是我們的敵人。抓住它,否則會導致不同的訓練/測試數據分割和不同的權值初始化神經網絡。這導致了不一致的結果。

def?set_seed(args):random.seed(args.seed)np.random.seed(args.seed)torch.manual_seed(args.seed)if?args.n_gpu?>?0:torch.cuda.manual_seed_all(args.seed)

3. 從幾行數據開始

如果你的數據太大,而你的工作是代碼的后面的部分,如清理數據或建模,那么可以使用nrows來避免每次加載巨大的數據。當你只想測試代碼而不實際運行整個代碼時,請使用此方法。

當你的本地PC配置無法加載所有的數據的時候,但你又喜歡在本地開發時,這是非常適用的,

df_train?=?pd.read_csv(‘train.csv’,?nrows=1000)

4. 預見失敗(成熟開發人員的標志)

一定要檢查數據中的NA,因為這些會給你以后帶來問題。即使你當前的數據沒有,這并不意味著它不會在未來的再訓練循環中發生。所以無論如何????繼續檢查。

print(len(df)) df.isna().sum() df.dropna() print(len(df))

5. 顯示處理進度

當你在處理大數據時,知道它將花費多少時間以及我們在整個處理過程中的位置肯定會讓你感覺很好。

選項 1 — tqdm

from?tqdm?import?tqdm import?timetqdm.pandas()df['col']?=?df['col'].progress_apply(lambda?x:?x**2)text?=?"" for?char?in?tqdm(["a",?"b",?"c",?"d"]):time.sleep(0.25)text?=?text?+?char

選項 2 — fastprogress

from?fastprogress.fastprogress?import?master_bar,?progress_bar from?time?import?sleep mb?=?master_bar(range(10)) for?i?in?mb:for?j?in?progress_bar(range(100),?parent=mb):sleep(0.01)mb.child.comment?=?f'second?bar?stat'mb.first_bar.comment?=?f'first?bar?stat'mb.write(f'Finished?loop?{i}.')


6. Pandas很慢

如果你使用過pandas,你就會知道有時它有多慢 —— 尤其是groupby。不用打破頭尋找“偉大的”解決方案加速,只需使用modin改變一行代碼就可以了。

import?modin.pandas?as?pd

7. 統計函數的時間

不是所有的函數都是生而平等的

即使整個代碼都能工作,也不意味著你寫的代碼很棒。一些軟件bug實際上會使你的代碼變慢,所以有必要找到它們。使用這個裝飾器來記錄函數的時間。

import?timedef?timing(f):"""Decorator?for?timing?functionsUsage:@timingdef?function(a):pass"""@wraps(f)def?wrapper(*args,?**kwargs):start?=?time.time()result?=?f(*args,?**kwargs)end?=?time.time()print('function:%r?took:?%2.2f?sec'?%?(f.__name__,??end?-?start))return?resultreturn?wrapper

8. 不要在云上燒錢

沒有人喜歡浪費云資源的工程師。

我們的一些實驗可以持續幾個小時。很難跟蹤它并在它完成時關閉云實例。我自己也犯過錯誤,也見過有人把實例開了好幾天。

這種情況發生在星期五,離開后,周一才意識到????

只要在執行結束時調用這個函數,你的屁股就再也不會著火了!!

但是將主代碼包裝在try中,此方法也包裝在except中 —— 這樣如果發生錯誤,服務器就不會繼續運行。是的,我也處理過這些情況????

讓我們更負責任一點,不要產生二氧化碳。????

import?osdef?run_command(cmd):return?os.system(cmd)def?shutdown(seconds=0,?os='linux'):"""Shutdown?system?after?seconds?given.?Useful?for?shutting?EC2?to?save?costs."""if?os?==?'linux':run_command('sudo?shutdown?-h?-t?sec?%s'?%?seconds)elif?os?==?'windows':run_command('shutdown?-s?-t?%s'?%?seconds)

9. 創建和保存報告

在建模的某個特定點之后,所有偉大的見解都只來自錯誤和度量分析。確保為自己和你的管理層創建和保存格式良好的報告。

????管理層喜歡報告,對嗎?????

import?json import?osfrom?sklearn.metrics?import?(accuracy_score,?classification_report,confusion_matrix,?f1_score,?fbeta_score)def?get_metrics(y,?y_pred,?beta=2,?average_method='macro',?y_encoder=None):if?y_encoder:y?=?y_encoder.inverse_transform(y)y_pred?=?y_encoder.inverse_transform(y_pred)return?{'accuracy':?round(accuracy_score(y,?y_pred),?4),'f1_score_macro':?round(f1_score(y,?y_pred,?average=average_method),?4),'fbeta_score_macro':?round(fbeta_score(y,?y_pred,?beta,?average=average_method),?4),'report':?classification_report(y,?y_pred,?output_dict=True),'report_csv':?classification_report(y,?y_pred,?output_dict=False).replace('\n','\r\n')}def?save_metrics(metrics:?dict,?model_directory,?file_name):path?=?os.path.join(model_directory,?file_name?+?'_report.txt')classification_report_to_csv(metrics['report_csv'],?path)metrics.pop('report_csv')path?=?os.path.join(model_directory,?file_name?+?'_metrics.json')json.dump(metrics,?open(path,?'w'),?indent=4)

10. 寫好APIs

所有的結果都是壞的。All that ends bad is bad.

你可以進行很好的數據清理和建模,但最終仍可能造成巨大的混亂。我與人打交道的經驗告訴我,許多人不清楚如何編寫好的api、文檔和服務器設置。我很快會寫另一篇關于這個的文章,但是讓我開始吧。

下面是在不太高的負載下(比如1000/min)部署經典的ML和DL的好方法。

fasbut + uvicorn

  • Fastest — 使用fastapi編寫API,因為它很快。

  • Documentation — 用fastapi寫API讓我們不用操心文檔。

  • Workers — 使用uvicorn部署API

使用4個worker運行這些命令進行部署。通過負載測試優化workers的數量。

pip?install?fastapi?uvicorn uvicorn?main:app?--workers?4?--host?0.0.0.0?--port?8000

—END—

英文原文:https://medium.com/modern-nlp/10-great-ml-practices-for-python-developers-b089eefc18fc

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進群:

總結

以上是生活随笔為你收集整理的【实战】使用Python部署机器学习模型的10个实践经验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级肉体全黄裸片 | 熟女丰满老熟女熟妇 | 成年人视频在线 | 日韩成人av网址 | 亚洲一区欧美二区 | 久久精品无码一区二区三区 | 成人欧美一区二区三区黑人冫 | 成人黄色三级视频 | 99视频观看| 日本人和亚洲人zjzjhd | 78m78成人免费网站 | 综合在线视频 | 美女下部无遮挡 | 精品无码一区二区三区电影桃花 | 精产国品一二三产品蜜桃 | 国产一区第一页 | 成人羞羞国产免费 | 在线免费观看一区 | 天操夜夜操 | 日韩激情第一页 | 国产精品第三页 | 亚洲综合图色40p | 福利资源在线 | 蜜臀久久99静品久久久久久 | 看一级黄色 | 亚洲欧美日韩国产综合 | 波多野结衣高清视频 | 少妇2做爰hd韩国电影 | 日本一区二区免费在线观看 | 好吊妞这里有精品 | 亚洲成色在线 | 日韩精品一区在线播放 | 国产无码精品合集 | 五月天丁香婷 | 蜜乳av一区二区 | 国产精品jizz在线观看老狼 | 国产精品福利在线 | 黄色精品在线观看 | 成人tiktok黄短视频 | 巨大乳の揉んで乳榨り奶水 | 玖草视频在线观看 | av大片免费 | 成人a视频在线观看 | 日日撸夜夜操 | 手机在线亚洲 | 国产外围在线 | julia一区二区三区中文字幕 | 欧美日韩一区二区三区在线播放 | 日韩精品网站 | 国产深夜视频 | 五月天啪啪 | 永久免费视频网站 | 天堂影视av | 久草视频播放 | 青娱乐自拍视频 | 亚洲第一视频在线 | 黄色小视频在线免费看 | 女人18毛片水真多18精品 | 丝袜美女av | 青青草成人免费在线视频 | 国产不卡视频 | 瑟瑟在线观看 | 粗大的内捧猛烈进出在线视频 | 女性裸体下面张开 | 欧美 日韩 国产 成人 在线 91 | 一区二区三区视频免费观看 | a毛片成人 | 国产三级精品三级在线观看 | 亚洲一区成人 | 欧美熟妇7777一区二区 | 99久久综合 | 男女做那个视频 | 日本三级视频在线观看 | 国产午夜伦理 | 欧美日性视频 | 少妇做爰k8经典 | 99久久精品免费看国产免费软件 | 99色在线观看 | 国产激情视频在线观看 | 噜噜噜久久,亚洲精品国产品 | 成人高潮片免费视频 | 俄罗斯美女一级爱片 | 国产亚洲欧美精品久久久www | 国产精品永久在线观看 | 91视频影院 | 五月婷婷视频在线 | 成人黄色片在线观看 | 男插女视频在线观看 | 精品久久久久久亚洲 | 久久网址 | 六月激情婷婷 | 一区二区传媒有限公司 | 99re这里只有精品在线观看 | 国产一区二区三区日韩 | 日本黄色www | 午夜男人天堂 | 海角社区在线视频播放观看 | 森泽佳奈在线播放 | 青青草伊人 |