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