自Cloudflare成立之初,我們就一直依靠ML和AI來提供Web應(yīng)用程序防火墻(WAF)等核心服務(wù)。在這個過程中,我們學(xué)到了很多關(guān)于大規(guī)模運行AI部署的經(jīng)驗,以及所有必要的工具和流程。我們推出了Workers AI,可幫助提取出許多推理方法,讓開發(fā)人員只需幾行代碼就能輕松利用強大的模型。在本篇文章中,我們將探討我們在ML等式的另一面——訓(xùn)練方面學(xué)到的一些經(jīng)驗。
Cloudflare擁有豐富的模型訓(xùn)練經(jīng)驗,并利用它們來改進我們的產(chǎn)品。不斷發(fā)展的ML模型推動了WAF Attack Score,有助于保護我們的客戶免受惡意有效負載的侵害。另一個不斷發(fā)展的模型為機器人管理產(chǎn)品提供支持,以捕獲和防止機器人對我們客戶的攻擊。數(shù)據(jù)科學(xué)增強了我們的客戶支持。我們構(gòu)建機器學(xué)習(xí)來識別我們?nèi)蚓W(wǎng)絡(luò)上的威脅。最重要的是,Cloudflare正在我們的網(wǎng)絡(luò)中以前所未有的規(guī)模提供機器學(xué)習(xí)。
這些產(chǎn)品以及其他許多產(chǎn)品都將ML模型(包括實驗、培訓(xùn)和部署)提升到了Cloudflare的重要位置。為了幫助我們的團隊繼續(xù)高效創(chuàng)新,我們的MLOps團隊與Cloudflare的數(shù)據(jù)科學(xué)家合作實施了以下最佳實踐。
Notebooks
給定用例和數(shù)據(jù),許多數(shù)據(jù)科學(xué)家/AI科學(xué)家的第一步是建立一個用于探索數(shù)據(jù)、特征工程和模型實驗的環(huán)境。Jupyter Notebooks是滿足這些要求的常用工具。這些環(huán)境提供了一個簡單的遠程Python環(huán)境,可以在瀏覽器中運行或連接到本地代碼編輯器。為了使Notebook具有可擴展性并開放協(xié)作,我們在Kubernetes上部署了JupyterHub。借助JupyterHub,我們可以管理數(shù)據(jù)科學(xué)家團隊的資源,并確保他們獲得合適的開發(fā)環(huán)境。每個團隊都可以通過預(yù)安裝庫和配置用戶環(huán)境來定制自己的環(huán)境,以滿足特定需求,甚至單個項目的需求。
這一Notebook空間也在不斷發(fā)展。開源項目還包括更多的功能,例如:
-nbdev:用于改善Notebook使用體驗的Python軟件包
-Kubeflow:用于機器學(xué)習(xí)的kubernetes原生CNCF項目
-depoyKF:任何Kubernetes集群上的ML平臺,提供集中配置、就地升級,并支持Kubeflow、Airflow和MLflow等領(lǐng)先的ML和數(shù)據(jù)工具
GitOps
我們的目標是為數(shù)據(jù)科學(xué)家和AI科學(xué)家提供一個易于使用的平臺,以快速開發(fā)和測試機器學(xué)習(xí)模型。因此,我們在Cloudflare的MLOps平臺上采用GitOps作為持續(xù)交付策略并進行基礎(chǔ)設(shè)施管理。GitOps是一種軟件開發(fā)方法,它利用分布式版本控制系統(tǒng)Git作為定義和管理基礎(chǔ)設(shè)施、應(yīng)用配置和部署流程的單一來源。其目的是以聲明和可審計的方式,自動化和簡化應(yīng)用與基礎(chǔ)設(shè)施的部署和管理。GitOps非常符合自動化和協(xié)作的原則,這些原則對機器學(xué)習(xí)(ML)工作流程至關(guān)重要。GitOps利用Git資源庫作為聲明式基礎(chǔ)設(shè)施和應(yīng)用代碼的真實來源。
數(shù)據(jù)科學(xué)家需要定義基礎(chǔ)設(shè)施和應(yīng)用的所需狀態(tài)。這通常需要大量的定制工作,但有了ArgoCD和模型模板,只需一個簡單的pull請求就能添加新的應(yīng)用。Helm圖表和Kustomize均受支持,可以針對不同的環(huán)境和作業(yè)進行配置。借助ArgoCD,聲明式GitOps將啟動持續(xù)交付流程。ArgoCD將持續(xù)檢查基礎(chǔ)設(shè)施和應(yīng)用的所需狀態(tài),以確保它們與Git存儲庫同步。
未來,我們計劃將我們的平臺(包括Jupyterhub)遷移到Kubeflow,這是一個基于Kubernetes的機器學(xué)習(xí)工作流程平臺,可簡化Notebook和端到端管道的開發(fā)、部署和管理。最好使用新項目deployKF進行部署,該項目允許跨Kubeflow可用的多個組件以及超出Kubeflow的其他組件進行分布式配置管理。
模版
是否使用正確的工具和結(jié)構(gòu)啟動項目可能決定項目是成功還是停滯。在Cloudflare,我們策劃了一系列模型模板,它們是帶有示例模型的生產(chǎn)就緒數(shù)據(jù)科學(xué)存儲庫。這些模型模板在生產(chǎn)過程中進行部署,以持續(xù)確保它們成為未來項目的穩(wěn)定基礎(chǔ)。要啟動一個新項目,只需要一個Makefile命令即可在用戶選擇的git項目中構(gòu)建一個新的CICD項目。這些模板實用程序包與我們的Jupyter Notebooks中使用的模板實用程序包以及與R2/S3/GCS存儲桶、D1/Postgres/Bigquery/Clickhouse數(shù)據(jù)庫的連接相同。數(shù)據(jù)科學(xué)家可以使用這些模板毫不費力地立即啟動新項目。這些模板尚未公開,但我們的團隊計劃在未來將其開源。
-訓(xùn)練模板
我們的模型訓(xùn)練模板為構(gòu)建任何模型提供了堅實的基礎(chǔ)。我們對其進行了配置,可幫助從任何數(shù)據(jù)源提取、轉(zhuǎn)換和加載數(shù)據(jù)(ETL)。該模板包括用于特征工程的helper函數(shù)、使用模型元數(shù)據(jù)跟蹤實驗以及通過有向無環(huán)圖(DAG)選擇編排以生產(chǎn)模型管道。每個編排都可以配置為使用Airflow或Argo Workflows。
-批量推理模板
批量和微批量推理可以對處理效率產(chǎn)生重大影響。我們的批量推理模型模板用于安排模型以獲得一致的結(jié)果,并且可以配置為使用Airflow或Argo Workflows。
-流式推理模板
該模板使我們的團隊可以輕松部署實時推理。該模板使用FastAPI針對Kubernetes進行了定制(作為微服務(wù)),允許我們的團隊在容器中使用熟悉的Python運行推理。該微服務(wù)已經(jīng)內(nèi)置了Swagger的REST交互式文檔,并與terraform中的Cloudflare Access身份驗證令牌集成。
-可解釋性模板
我們的可解釋性模型模板會旋轉(zhuǎn)儀表板來闡明模型類型和實驗。能夠理解時間窗口F1分數(shù)、特征和數(shù)據(jù)隨時間的漂移等關(guān)鍵值非常重要。Streamlit和Bokeh等工具有助于實現(xiàn)這一目標。
編排
將數(shù)據(jù)科學(xué)組織成一致的管道涉及大量數(shù)據(jù)和多個模型版本。輸入有向無環(huán)圖(DAG),這是一種強大的流程圖編排范例,它將從數(shù)據(jù)到模型、模型到推理的步驟編織在一起。運行DAG管道有許多獨特的方法,但我們發(fā)現(xiàn)數(shù)據(jù)科學(xué)團隊的偏好是第一位的。每個團隊根據(jù)自己的用例和經(jīng)驗都有不同的方法。
-Apache Airflow——標準DAG編寫器
Apache Airflow是基于DAG(有向無環(huán)圖)的編排方法的標準。憑借龐大的社區(qū)和廣泛的插件支持,Airflow擅長處理不同的工作流。與多個系統(tǒng)集成的靈活性以及用于任務(wù)監(jiān)控的基于Web的UI使其成為編排復(fù)雜任務(wù)序列的人氣之選。Airflow可用于運行任何數(shù)據(jù)或機器學(xué)習(xí)工作流。
-Argo Workflows——Kubernetes原生的輝煌
Argo Workflows專為Kubernetes構(gòu)建,采用容器生態(tài)系統(tǒng)來編排工作流程。它擁有基于YAML的直觀工作流定義,并且擅長運行基于微服務(wù)的工作流。與Kubernetes的集成可實現(xiàn)可擴展性、可靠性和原生容器支持,使其非常適合深深植根于Kubernetes生態(tài)系統(tǒng)的組織。Argo Workflows還可用于運行任何數(shù)據(jù)或機器學(xué)習(xí)工作流。
-Kubeflow Pipelines——一個工作流平臺
Kubeflow Pipelines是一種更具體的方法,專為編排機器學(xué)習(xí)工作流而定制。“KFP”旨在滿足ML領(lǐng)域中數(shù)據(jù)準備、模型訓(xùn)練和部署的獨特需求。作為Kubeflow生態(tài)系統(tǒng)的集成組件,它簡化了ML工作流程,重點關(guān)注協(xié)作、可重用性和版本控制。它與Kubernetes的兼容性確保了無縫集成和高效編排。
-Temporal——有狀態(tài)的工作流推動者
Temporal的立場是強調(diào)長期運行、具狀態(tài)工作流的編排。這個相對較新的領(lǐng)域在管理彈性、事件驅(qū)動的應(yīng)用、保留工作流狀態(tài)以及實現(xiàn)高效的故障恢復(fù)方面表現(xiàn)出色。獨特的賣點在于它能夠管理復(fù)雜、有狀態(tài)的工作流,提供持久且容錯的編排解決方案。
在編排領(lǐng)域,選擇最終取決于團隊和實際用例。這些都是開源項目,因此唯一的限制是對不同風格工作的支持,我們發(fā)現(xiàn)這是值得投資的。
硬件
實現(xiàn)最佳性能需要了解工作負載和底層用例,以便為團隊提供有效的硬件。目標是幫助數(shù)據(jù)科學(xué)家并在支持和利用之間取得平衡。每個工作負載都是不同的,因此針對GPU和CPU的功能微調(diào)每個用例以找到適合該工作的完美工具非常重要。對于核心數(shù)據(jù)中心工作負載和邊緣推理,GPU提高了速度和效率,這是我們業(yè)務(wù)的核心。Prometheus提供可觀察性和指標,指標使我們能夠跟蹤編排以優(yōu)化性能、最大限度地提高硬件利用率,并在Kubernetes原生體驗中進行操作。
采用
采用通常是MLops之旅中最具挑戰(zhàn)性的步驟之一。在開始構(gòu)建之前,了解不同的團隊及其數(shù)據(jù)科學(xué)方法非常重要。在Cloudflare,這個過程幾年前就開始了,當時每個團隊都分別啟動了自己的機器學(xué)習(xí)解決方案。隨著這些解決方案的發(fā)展,我們遇到了在整個公司范圍內(nèi)開展工作以防止不同團隊之間的工作相互分離的共同挑戰(zhàn)。此外,還有其他團隊具有機器學(xué)習(xí)潛力,但團隊內(nèi)不具備數(shù)據(jù)科學(xué)專業(yè)知識。這為MLops提供了介入的機會——既可以幫助簡化和標準化每個團隊所采用的ML流程,也可以向數(shù)據(jù)科學(xué)團隊引入潛在的新項目,以啟動構(gòu)思和發(fā)現(xiàn)過程。
在有能力的情況下,當我們能夠幫助啟動項目并塑造成功的渠道時,我們就獲得了最大的成功。提供共享使用的組件,例如Notebook、編排、數(shù)據(jù)版本控制(DVC)、特征工程(Feast)和模型版本控制(MLflow),讓團隊能夠直接協(xié)作。
展望未來
毫無疑問,數(shù)據(jù)科學(xué)正在發(fā)展我們的業(yè)務(wù)和我們客戶的業(yè)務(wù)。我們通過模型改進我們自己的產(chǎn)品,并構(gòu)建了AI基礎(chǔ)設(shè)施,可以幫助我們保護應(yīng)用和使用AI構(gòu)建的應(yīng)用。我們可以利用網(wǎng)絡(luò)的力量為我們和我們的客戶提供AI。我們與機器學(xué)習(xí)巨頭合作,使數(shù)據(jù)科學(xué)界更容易從數(shù)據(jù)中提供真正的價值。
行動號召:歡迎加入Cloudflare社區(qū),將現(xiàn)代軟件實踐和工具引入數(shù)據(jù)科學(xué)。請關(guān)注Cloudflare的更多數(shù)據(jù)科學(xué)。幫助我們安全地利用數(shù)據(jù)來協(xié)助構(gòu)建更好的互聯(lián)網(wǎng)。