本文說明兩種參考架構,協助您在 Google Cloud 上使用 Google Kubernetes Engine (GKE) 建立聯邦式學習平台。本文所述的參考架構和相關資源支援下列項目:
- 跨孤島聯合學習
- 跨裝置聯合學習,以跨孤島架構為基礎
本文的目標讀者是雲端架構師,以及想在Google Cloud上實作聯邦式學習應用情境的 AI 和 ML 工程師。此外,這份指南也適合決策者,用來評估是否要在 Google Cloud上導入聯邦學習。
架構
本節中的圖表顯示聯邦學習的跨孤島架構和跨裝置架構。如要瞭解這些架構的不同應用,請參閱「用途」。
跨孤島架構
下圖顯示支援跨孤島聯盟學習的架構:
上圖是跨孤島架構的簡化範例。在圖表中,所有資源都位於機構中的同一個專案。 Google Cloud這些資源包括本機用戶端模型、全域用戶端模型,以及相關聯的聯合學習工作負載。
您可以修改這個參考架構,支援多種資料孤島設定。聯盟成員可以透過下列方式代管資料孤島:
- 位於同一個 Google Cloud 機構和同一個 Google Cloud專案中。 Google Cloud
- 在 Google Cloud,位於相同 Google Cloud 機構的不同Google Cloud 專案中。
- 在 Google Cloud不同 Google Cloud 機構中。
- 在私有、內部部署環境或其他公有雲中。
參與成員必須在環境之間建立安全通訊管道,才能協作。如要進一步瞭解參與成員在聯邦學習工作中的角色、協作方式,以及彼此分享的內容,請參閱「使用案例」。
此架構包含下列元件:
- 虛擬私有雲 (VPC) 網路和子網路。
- 私人 GKE 叢集,可協助您執行下列操作:
- 將叢集節點與網際網路隔絕。
- 建立具備授權網路的 GKE 私人叢集,限制叢集節點和控制層在網際網路上的暴露程度。
- 使用受防護的叢集節點,這些節點會使用強化型作業系統映像檔。
- 啟用 Dataplane V2, 即可最佳化 Kubernetes 網路。
- 專屬 GKE節點集區: 您可以建立專屬節點集區,專門用於代管租戶應用程式和資源。節點有 taint,可確保只有租戶工作負載會排程到租戶節點。其他叢集資源則會託管在主要節點集區中。
資料加密 (預設為啟用):
使用中的資料加密,可選擇啟用機密 Google Kubernetes Engine 節點。
虛擬私有雲防火牆規則,適用於下列項目:
- 適用於叢集中所有節點的基準規則。
- 僅適用於租戶節點集區中節點的其他規則。這些防火牆規則會限制租戶節點的輸入和輸出。
Cloud NAT,允許輸出至網際網路。
Cloud DNS 記錄,啟用私人 Google 存取權,讓叢集中的應用程式不必透過網際網路即可存取 Google API。
服務帳戶,如下所示:
- 租戶節點集區中節點的專屬服務帳戶。
- 租戶應用程式專用的服務帳戶,可搭配 Workload Identity 聯盟使用。
儲存設定描述元的 Git 存放區。
用來儲存容器映像檔的 Artifact Registry 存放區。
Config Sync 和 Policy Controller,部署設定和政策。
Cloud Service Mesh 閘道,可選擇性地允許叢集輸入和輸出流量。
Cloud Storage 值區,用於儲存全域和區域模型權重。
存取其他 Google 和 API。 Google Cloud 舉例來說,訓練工作負載可能需要存取儲存在 Cloud Storage、BigQuery 或 Cloud SQL 中的訓練資料。
跨裝置架構
下圖顯示支援跨裝置聯邦學習的架構:
上述跨裝置架構以跨孤島架構為基礎,並新增下列元件:
- 模擬裝置連線至伺服器的 Cloud Run 服務
- 憑證授權單位服務,可為伺服器和用戶端建立私人憑證,以供執行
- Vertex AI TensorBoard,用於將訓練結果視覺化
- 用於儲存合併模型的 Cloud Storage bucket
- 使用機密節點做為主要集區的私有 GKE 叢集,有助於保護使用中的資料
跨裝置架構會使用開放原始碼聯邦運算平台 (FCP) 專案的元件。這個專案包含下列項目:
- 用於與伺服器通訊,並在裝置上執行工作的用戶端程式碼
- 用戶端與伺服器之間的通訊協定
- TensorFlow Federated 的連結點,可讓您更輕鬆地定義聯合運算
上圖所示的 FCP 元件可以部署為一組微服務。這些元件的用途如下:
- 匯總器:這項工作會讀取裝置梯度,並使用差異隱私計算匯總結果。
- 收集器:這項工作會定期執行,查詢有效工作和加密梯度。這項資訊會決定何時開始匯總。
- 模型上傳者:這項工作會監聽事件並發布結果,讓裝置下載更新的模型。
- 工作指派:這個前端服務會將訓練工作分配給裝置。
- 工作管理:這項工作負責管理工作。
- 工作排程器:這項工作會定期執行,或由特定事件觸發。
使用的產品
這兩個聯合學習應用實例的參考架構都使用下列 Google Cloud 元件:
- Google Cloud Kubernetes 引擎 (GKE): GKE 提供聯邦學習的基礎平台。
- TensorFlow Federated (TFF): TFF 提供開放原始碼架構,可對去中心化的資料進行機器學習和其他運算。
GKE 也為您的聯邦式學習平台提供下列功能:
- 代管聯合學習協調者:聯合學習協調者負責管理聯合學習程序。這類管理作業包括將全域模型分配給參與者、匯總參與者的更新,以及更新全域模型。您可以使用 GKE,以高可用性和可擴充性方式代管聯合學習協調器。
- 主辦聯合學習參與者:聯合學習參與者有責任使用本機資料訓練通用模型。GKE 可用於以安全且獨立的方式,代管聯合學習參與者。這個做法有助於確保參與者的資料保留在本機。
- 提供安全且可擴充的通訊管道:聯合學習參與者必須能夠以安全且可擴充的方式,與聯合學習協調員通訊。GKE 可用於在參與者和協調器之間提供安全且可擴充的通訊管道。
- 管理聯邦式學習部署作業的生命週期: GKE 可用於管理聯邦式學習部署作業的生命週期。這類管理工作包括佈建資源、部署聯合學習平台,以及監控聯合學習平台的效能。
除了上述優點,GKE 也提供許多有助於部署聯合學習的功能,例如:
- 區域叢集:GKE 可讓您建立區域叢集,藉此縮短參與者與協調器之間的延遲時間,進而提升聯邦式學習部署作業的效能。
- 網路政策:GKE 可讓您建立網路政策,控管參與者和協調器之間的流量,進而提升聯邦學習部署作業的安全性。
- 負載平衡:GKE 提供多種負載平衡選項,可將流量分配給參與者和協調器,有助於提升聯合學習部署作業的擴充性。
TFF 提供下列功能,方便您實作聯合學習用途:
- 以宣告方式表示聯合運算的能力,這是一組在伺服器和用戶端執行的處理步驟。這些運算可部署至不同的執行階段環境。
- 您可以使用 TFF 開放原始碼建構自訂匯總器。
- 支援多種聯合學習演算法,包括:
- 聯合平均化:
這項演算法會平均計算參與用戶端的模型參數。如果資料相對同質,且模型不會太複雜,就特別適合使用這個方法。常見用途如下:
- 個人化建議:公司可以運用聯邦平均,訓練模型根據使用者的購買記錄推薦產品。
- 詐欺偵測:銀行聯盟可使用聯合平均訓練模型,偵測詐欺交易。
- 醫療診斷:一群醫院可使用聯邦平均訓練模型,診斷癌症。
- 聯合隨機梯度下降 (FedSGD):這項演算法會使用隨機梯度下降法更新模型參數。這項技術非常適合用於資料異質且模型複雜的應用情境。常見用途如下:
- 自然語言處理:公司可以使用 FedSGD 訓練模型,提高語音辨識準確度。
- 圖片辨識:公司可以使用 FedSGD 訓練模型,辨識圖片中的物件。
- 預測性維護:公司可以使用 FedSGD 訓練模型,預測機器可能故障的時間。
- 聯合 Adam:
這項演算法會使用 Adam 最佳化工具更新模型參數。
常見用途如下:
- 推薦系統:公司可使用聯合 Adam 訓練模型,根據使用者的購買記錄推薦產品。
- 排名:公司可使用聯合 Adam 訓練模型,對搜尋結果進行排名。
- 點閱率預測:公司可使用聯邦式 Adam 訓練模型,預測使用者點按廣告的可能性。
- 聯合平均化:
這項演算法會平均計算參與用戶端的模型參數。如果資料相對同質,且模型不會太複雜,就特別適合使用這個方法。常見用途如下:
用途
本節說明適合在聯邦式學習平台中採用跨孤島和跨裝置架構的用途。
聯合學習是一種機器學習設定,許多用戶端會共同訓練模型。這個程序由中央協調器主導,訓練資料仍維持分散式。
在聯合學習範例中,用戶端會下載全域模型,並在本機訓練資料,藉此改善模型。接著,各用戶端會將計算出的模型更新傳回中央伺服器,由伺服器匯總模型更新,並產生新一輪的全域模型。在這些參考架構中,模型訓練工作負載會在 GKE 上執行。
聯合學習體現了資料最小化原則,限制在運算各階段收集的資料、限制資料存取權,並盡可能提早處理及捨棄資料。此外,聯合學習的問題設定與其他隱私權保護技術相容,例如使用差異隱私 (DP) 來改善模型匿名化,確保最終模型不會記住個別使用者的資料。
視用途而定,使用聯合學習訓練模型可帶來額外優點:
- 法規遵循:在某些情況下,法規可能會限制資料的使用或分享方式。聯合學習可用於遵守這些法規。
- 通訊效率:在某些情況下,訓練分散式資料的模型比集中式資料更有效率。舉例來說,模型需要訓練的資料集過於龐大,無法集中移動。
- 存取資料:聯合學習可讓機構在每個使用者或機構的資料孤島中,保留分散式訓練資料。
- 提高模型準確度:以真實使用者資料 (同時確保隱私權) 而非合成資料 (有時稱為 Proxy 資料) 進行訓練,通常可提高模型準確度。
聯合學習有多種形式,可根據資料來源和本機運算發生位置進行分類。本文中的架構著重於兩種聯邦學習:跨孤島和跨裝置。本文不討論其他類型的聯邦式學習。
聯邦學習可依資料集分割方式進一步分類,如下所示:
- 水平聯合學習 (HFL):資料集具有相同的特徵 (欄),但樣本 (列) 不同。舉例來說,多間醫院可能擁有相同醫療參數的病患記錄,但病患族群不同。
- 垂直聯邦學習 (VFL):資料集具有相同的樣本 (資料列),但特徵 (資料欄) 不同。舉例來說,銀行和電子商務公司可能擁有部分相同的客戶資料,但財務和購物資訊不同。
- 聯合遷移學習 (FTL):資料集中的樣本和特徵部分重疊。舉例來說,兩間醫院的病患記錄可能包含部分重疊的個人資料和共用的醫療參數,但每個資料集也有獨特特徵。
跨孤島的聯邦運算是指參與成員為機構或公司。實務上,成員人數通常不多 (例如一百人以內)。跨孤島運算通常用於參與機構擁有不同資料集,但想訓練共用模型或分析匯總結果,且不想彼此分享原始資料的案例。舉例來說,參與成員的環境可能位於不同 Google Cloud 機構,例如代表不同法人實體時,或位於相同Google Cloud 機構,例如代表相同法人實體的不同部門時。
參與成員可能無法將彼此的工作負載視為受信任的實體。舉例來說,參與成員可能無法存取從第三方 (例如協調員) 收到的訓練工作負載原始碼。由於無法存取這個原始碼,參與成員無法確保工作負載完全值得信任。
為防止不受信任的工作負載未經授權存取您的資料或資源,建議您採取下列做法:
- 在隔離環境中部署不受信任的工作負載。
- 只授予不受信任的工作負載完成訓練回合所需的存取權和權限。
為協助您隔離可能不受信任的工作負載,這些參考架構會實作安全控管措施,例如設定隔離的 Kubernetes 命名空間,每個命名空間都有專屬的 GKE 節點集區。除非您明確覆寫這項設定,否則系統預設會禁止跨命名空間通訊,以及叢集傳入和傳出流量。
跨孤島聯合學習的用途範例如下:
- 詐欺偵測:聯合學習可用於訓練詐欺偵測模型,資料則分散於多個機構。舉例來說,銀行聯盟可使用聯合學習技術訓練模型,偵測詐欺交易。
- 醫療診斷:聯合學習可用於訓練醫療診斷模型,資料則分散在多間醫院。舉例來說,一群醫院可以運用聯合學習訓練診斷癌症的模型。
跨裝置聯合學習 是一種聯合運算,參與成員是使用者裝置,例如手機、車輛或 IoT 裝置。成員人數可達數百萬,甚至數千萬。
跨裝置聯合學習的程序與跨孤島聯合學習類似。不過,您也必須調整參考架構,以因應處理成千上萬部裝置時必須考量的額外因素。您必須部署管理工作負載,以處理跨裝置聯合學習用途中遇到的情境。舉例來說,您需要協調一組用戶端,這些用戶端將參與訓練回合。跨裝置架構可讓您部署 FCP 服務,這些服務的工作負載具有與 TFF 的連線點。TFF 用於編寫管理這項協調作業的程式碼。
跨裝置聯合學習的用途範例如下:
- 個人化推薦內容:您可以運用跨裝置的聯合學習技術,根據分散在多部裝置上的資料,訓練個人化推薦模型。舉例來說,公司可以使用聯邦學習訓練模型,根據使用者的購買記錄推薦產品。
- 自然語言處理:聯合學習可用於訓練自然語言處理模型,模型會使用分散在多部裝置上的資料。舉例來說,公司可以運用聯合學習訓練模型,提高語音辨識準確度。
- 預測車輛維修需求:聯合學習可用於訓練模型,預測車輛可能需要維修的時間。這個模型可能會使用從多部車輛收集的資料進行訓練。這種做法可讓模型從所有車輛的體驗中學習,同時不會洩漏任何車輛的隱私權。
下表彙整了跨孤島和跨裝置架構的功能,並說明如何根據您的用途,將適用的聯邦學習情境分類。
功能 | 跨孤島聯合運算 | 跨裝置聯合運算 |
---|---|---|
母體大小 | 通常很小 (例如,一百部裝置以內) | 可擴充至數千、數百萬或數億部裝置 |
參與成員 | 機構或公司 | 行動裝置、邊緣裝置、車輛 |
最常見的資料分區 | HFL、VFL、FTL | HFL |
Data sensitivity | 參與者不想以原始格式分享的機密資料 | 不適合與中央伺服器共用的機密資料 |
資料可用性 | 參與者幾乎隨時都能加入 | 任何時間都只有一小部分參與者可供使用 |
應用實例 | 詐欺偵測、醫療診斷、財務預測 | 健身追蹤、語音辨識、圖片分類 |
設計須知
本節提供相關指引,協助您運用這個參考架構開發一或多個架構,滿足安全性、可靠性、作業效率、成本和效能方面的特定需求。
跨筒倉架構設計注意事項
如要在Google Cloud中實作跨孤島的聯邦學習架構,您必須實作下列最低必要條件,詳情請見後續章節:
- 成立聯合學習聯盟。
- 為聯合學習聯盟決定協作模式,然後實作。
- 決定參與機構的責任。
除了這些先決條件,聯盟擁有者還必須採取其他動作,但這些動作不在本文的討論範圍內,例如:
- 管理聯合學習聯盟。
- 設計及實作協作模型。
- 準備、管理及操作模型訓練資料,以及聯盟擁有者打算訓練的模型。
- 建立、容器化及自動化調度管理聯合學習工作流程。
- 部署及管理聯合學習工作負載。
- 為參與機構設定通訊管道,以便安全地移轉資料。
成立聯合學習聯盟
聯合學習聯盟是指參與跨孤島聯合學習計畫的機構群組。聯盟中的機構只會共用 ML 模型的參數,您可以加密這些參數,提高隱私權。如果聯邦學習聯盟允許這種做法,機構也可以匯總不含個人識別資訊 (PII) 的資料。
為聯邦學習聯盟決定協作模型
聯合學習聯盟可以實作不同的協作模型,例如:
- 集中式模型,由單一協調機構 (稱為「聯盟擁有者」或「協調器」) 和一組「參與機構」或「資料擁有者」組成。
- 去中心化模型:由以群組形式協調的機構組成。
- 異質模型:由多個不同的參與機構組成,這些機構會為聯盟帶來不同的資源。
本文假設協作模型是集中式模型。
決定參與機構的職責
為聯邦學習聯盟選擇協作模式後,聯盟擁有者必須決定參與機構的責任。
聯盟擁有者開始建立聯邦式學習聯盟時,也必須執行下列操作:
- 協調聯合學習工作。
- 設計及實作全域 ML 模型,以及要與參與機構分享的 ML 模型。
- 定義聯合學習回合,也就是機器學習訓練程序的疊代方法。
- 選取參與任何特定聯邦式學習回合的機構。這項選取作業稱為「同類群組」。
- 為參與機構設計及實作聯盟成員資格驗證程序。
- 更新全域機器學習模型,以及要與參與機構共用的機器學習模型。
- 為參與機構提供工具,驗證聯邦式學習聯盟是否符合隱私權、安全性及法規要求。
- 為參與機構提供安全且經過加密的通訊管道。
- 向參與機構提供完成每一輪聯邦學習所需的非機密匯總資料。
參與機構的責任如下:
- 提供並維護安全的隔離環境 (即資訊孤島)。參與機構會在孤島中儲存自己的資料,並實作機器學習模型訓練。參與機構不會與其他機構分享自己的資料。
- 使用自己的運算基礎架構和本機資料,訓練聯盟擁有者提供的模型。
- 移除所有個人識別資訊後,以匯總資料的形式與聯盟擁有者分享模型訓練結果。
聯盟擁有者和參與機構可以使用 Cloud Storage 分享更新的模型和訓練結果。
聯盟擁有者和參與機構會持續微調機器學習模型訓練,直到模型符合需求為止。
在 Google Cloud上實作聯合學習
建立聯邦式學習聯盟並決定聯盟的協作方式後,建議參與機構執行下列操作:
為聯合學習聯盟佈建及設定基礎架構
為聯合學習聯盟佈建及設定基礎架構時,聯盟擁有者有責任建立工作負載,並將工作負載分配給參與機構,以訓練聯合機器學習模型。由於工作負載是由第三方 (聯盟擁有者) 建立及提供,參與機構在執行階段環境中部署這些工作負載時,必須採取預防措施。
參與機構必須根據個別安全防護最佳做法設定環境,並套用控管措施,限制每個工作負載的範圍和授權。除了遵循個別安全最佳做法外,我們建議聯盟擁有者和參與機構考慮聯邦式學習特有的威脅向量。
實作協作模型
準備好聯邦學習聯盟基礎架構後,聯盟擁有者會設計及實作相關機制,讓參與機構彼此互動。這個方法會遵循聯盟擁有者為聯合學習聯盟選擇的協作模式。
開始進行聯合學習
實作協作模型後,聯盟擁有者會實作全域 ML 模型來訓練,並與參與機構分享 ML 模型。機器學習模型準備就緒後,聯盟擁有者會開始第一輪的聯邦式學習作業。
在每一輪的聯邦學習作業中,聯邦擁有者會執行下列操作:
- 將機器學習模型發布給參與機構。
- 等待參與機構提供聯盟擁有者分享的機器學習模型訓練結果。
- 收集及處理參與機構產生的訓練結果。
- 當參與機構提供適當的訓練結果時,就會更新全域機器學習模型。
- 視情況更新機器學習模型,並與聯盟的其他成員分享。
- 準備下一輪聯邦學習的訓練資料。
- 開始下一輪聯合學習。
安全性、隱私權和法規遵循
本節說明使用這個參考架構在Google Cloud上設計及建構聯邦式學習平台時,應考慮的因素。這項指引適用於本文所述的兩種架構。
在環境中部署的聯合學習工作負載可能會讓您、您的資料、聯合學習模型和基礎架構暴露於威脅之下,進而影響您的業務。
為協助您提升聯邦式學習環境的安全性,這些參考架構會設定GKE 安全性控制項,著重於環境的基礎架構。這些控制項可能不足以防範與您的聯邦學習工作負載和用途相關的威脅。由於每個聯合學習工作負載和用途都有其特殊性,因此本文不討論如何確保聯合學習實作的安全。如要進一步瞭解這些威脅和相關範例,請參閱「聯邦學習安全考量」。
GKE 安全性控制項
本節將說明如何透過這些架構套用控管措施,確保 GKE 叢集安全無虞。
強化 GKE 叢集安全防護
這些參考架構可協助您建立 GKE 叢集,並實作下列安全性設定:
- 建立私人 GKE 叢集並使用授權網路,限制叢集節點和控制層在網際網路上的暴露程度。
- 使用受防護的節點,這些節點使用含有
containerd
執行階段的強化節點映像檔。 - 使用 GKE Sandbox 提高租戶工作負載的隔離程度。
- 預設加密靜態資料。
- 預設加密傳輸中的資料。
- 在應用程式層加密叢集密鑰。
- 您可以啟用機密 Google Kubernetes Engine 節點,選擇性加密使用中的資料。
如要進一步瞭解 GKE 安全性設定,請參閱「強化叢集安全性」和「安全防護機制資訊主頁簡介」。
虛擬私有雲防火牆規則
虛擬私有雲 (VPC) 防火牆規則可控管允許傳入或傳出 Compute Engine VM 的流量。您可以根據第 4 層屬性,透過規則以 VM 精細程度篩選流量。
您可以使用預設 GKE 叢集防火牆規則建立 GKE 叢集。這些防火牆規則可讓叢集節點與 GKE 控制層之間,以及叢集中的節點與 Pod 之間進行通訊。
您會將額外防火牆規則套用至租戶節點集區中的節點。這些防火牆規則會限制租戶節點的輸出流量。這種方法可提高租戶節點的隔離程度。根據預設,系統會拒絕來自租戶節點的所有輸出流量。必須明確設定所有必要的輸出。舉例來說,您可以建立防火牆規則,允許從租戶節點輸出至 GKE 控制層,並使用私人 Google 存取權存取 Google API。防火牆規則會使用租戶節點集區的服務帳戶,以租戶節點為目標。
命名空間
命名空間可讓您在叢集內為相關資源 (例如 Pod、服務和複寫控制器) 提供範圍。使用命名空間時,您可以將相關資源的管理責任委派為一個單位。因此,命名空間是大多數安全模式不可或缺的一環。
命名空間是控制層隔離的重要功能。不過,這些功能無法提供節點隔離、資料平面隔離或網路隔離。
常見的做法是為個別應用程式建立命名空間。舉例來說,您可能會為應用程式的 UI 元件建立 myapp-frontend
命名空間。
這些參考架構可協助您建立專用命名空間,用於代管第三方應用程式。命名空間及其資源會視為叢集內的租戶。您可以對命名空間套用政策和控管措施,限制命名空間中的資源範圍。
網路政策
網路政策會使用 Pod 層級的防火牆規則,強制執行第 4 層網路流量。網路政策適用於命名空間。
在本文說明的參考架構中,您會將網路政策套用至代管第三方應用程式的租戶命名空間。根據預設,網路政策會拒絕命名空間中 pod 的所有流量。您必須將所有必要流量明確加入許可清單。舉例來說,這些參考架構中的網路政策會明確允許流量傳送至必要的叢集服務,例如叢集內部 DNS 和 Cloud Service Mesh 控制層。
Config Sync
Config Sync 可讓 GKE 叢集與儲存在 Git 存放區中的設定保持同步。Git 存放區是叢集設定和政策的單一可靠資料來源。Config Sync 採用宣告式方法。持續檢查叢集狀態,並套用設定檔中宣告的狀態來強制執行政策,有助於避免設定偏移。
您要將 Config Sync 安裝到 GKE 叢集。您可以設定 Config Sync,從 Cloud Source 存放區同步叢集設定和政策。 同步的資源包括:
- 叢集層級 Cloud Service Mesh 設定
- 叢集層級安全性政策
- 租戶命名空間層級的設定和政策,包括網路政策、服務帳戶、RBAC 規則和 Cloud Service Mesh 設定
Policy Controller
Google Kubernetes Engine (GKE) Enterprise 版 Policy Controller 是 Kubernetes 的動態許可控制器,可強制執行以 CustomResourceDefinition (CRD) 為基礎的政策,並由 Open Policy Agent (OPA) 執行。
許可控制器是 Kubernetes 外掛程式,會在物件保存之前,但在要求經過驗證和授權之後,攔截傳送至 Kubernetes API 伺服器的要求。您可以使用許可控制器限制叢集的使用方式。
您會在 GKE 叢集中安裝 Policy Controller。這些參考架構包含範例政策,可協助您保護叢集安全。您可以使用 Config Sync,自動將政策套用至叢集。您在所選層級
- 選取的政策可協助強制執行 Pod 安全性。舉例來說,您可以套用政策,禁止 Pod 執行具有特殊權限的容器,並要求使用唯讀的根檔案系統。
- Policy Controller 範本庫中的政策。舉例來說,您可以套用禁止使用 NodePort 類型服務的政策。
Cloud Service Mesh
Cloud Service Mesh 是一種服務網格,可協助您簡化服務間安全通訊的管理作業。這些參考架構會設定 Cloud Service Mesh,使其執行下列操作:
- 自動插入補充 Proxy。
- 強制執行網格中服務之間的mTLS 通訊。
- 限制外送網格流量,僅限已知主機。
- 只允許來自特定用戶端的傳入流量。
- 可讓您根據服務身分設定網路安全政策,而非根據網路上對等互連的 IP 位址。
- 限制網格中服務之間的授權通訊。舉例來說,租戶命名空間中的應用程式只能與相同命名空間中的應用程式,或一組已知的外部主機通訊。
- 透過網格閘道轉送所有傳入和傳出流量,以便進一步控管流量。
- 支援叢集之間的加密安全通訊。
節點 taint 和相依性
節點汙點和節點親和性是 Kubernetes 機制,可讓您影響 Pod 在叢集節點上的排定方式。
受汙染的節點會排斥 Pod。除非 Pod 具有 taint 的容許條件,否則 Kubernetes 不會將 Pod 排定在已遭 taint 的節點上。您可以使用節點 taint 保留節點,僅供特定工作負載或租戶使用。汙點和容許度通常用於多租戶叢集。詳情請參閱專用節點 (含汙點和容許度) 說明文件。
節點相依性可讓您將 Pod 限制在具有特定標籤的節點。如果 Pod 有節點親和性需求,除非節點的標籤符合親和性需求,否則 Kubernetes 不會將 Pod 排定在節點上。您可以透過節點相依性,確保 Pod 會排程到合適的節點。
您可以同時使用節點 taint 和節點相依性,確保系統只會將用戶群工作負載 Pod 排定在為該用戶群保留的節點上。
這些參考架構可協助您透過下列方式控管租戶應用程式的排程:
- 建立專供租戶使用的 GKE 節點集區。 集區中的每個節點都有與租戶名稱相關的汙點。
- 自動將適當的容許度和節點親和性套用至以租戶命名空間為目標的任何 Pod。您可以使用 PolicyController 突變套用容許度和親和性。
最低權限
採用最低權限原則是保護Google Cloud 專案和資源 (例如 GKE 叢集) 的最佳做法。採用這種做法後,在叢集內執行的應用程式,以及使用叢集的開發人員和營運人員,都只會擁有必要的最低權限。
這些參考架構可協助您透過下列方式,使用僅具備必要權限的服務帳戶:
- 每個 GKE 節點集區都會收到自己的服務帳戶。舉例來說,租戶節點集區中的節點會使用專為這些節點提供的服務帳戶。節點服務帳戶已設定最低必要權限。
- 叢集會使用 Workload Identity Federation for GKE,將 Kubernetes 服務帳戶與 Google 服務帳戶建立關聯。這樣一來,租戶應用程式就能獲得任何必要 Google API 的有限存取權,不必下載及儲存服務帳戶金鑰。舉例來說,您可以授予服務帳戶從 Cloud Storage 值區讀取資料的權限。
這些參考架構可協助您透過下列方式限制叢集資源的存取權:
- 您會建立 Kubernetes RBAC 範例角色,並授予管理應用程式的有限權限。您可以將這個角色授予在租戶命名空間中操作應用程式的使用者和群組。套用這項使用者和群組的受限角色後,這些使用者就只具備在租戶命名空間中修改應用程式資源的權限。他們沒有權限修改叢集層級的資源或敏感安全性設定,例如 Cloud Service Mesh 政策。
二進位授權
二進位授權可讓您強制執行所定義的政策,確保 GKE 環境中部署的容器映像檔符合規定。二進位授權只允許部署符合您定義政策的容器映像檔。禁止部署任何其他容器映像檔。
在本參考架構中,二進位授權已啟用,並採用預設設定。如要檢查二進位授權預設設定,請參閱「匯出政策 YAML 檔案」。
如要進一步瞭解如何設定政策,請參閱下列特定指南:
跨機構驗證
您可以使用二進位授權,驗證第三方簽署者產生的認證。舉例來說,在跨孤島的聯邦學習用途中,您可以驗證其他參與機構建立的認證。
如要驗證第三方建立的認證,請執行下列操作:
- 接收第三方用於建立認證的公開金鑰,您需要驗證這些認證。
- 建立驗證者,以驗證認證。
- 將您從第三方收到的公開金鑰新增至您建立的驗證者。
如要進一步瞭解如何建立認證者,請參閱下列特定指南:
聯合學習安全考量
雖然聯邦式學習採用嚴格的資料共用模型,但並非本質上就能防範所有目標式攻擊,因此部署本文所述任一架構時,您應將這些風險納入考量。此外,也可能無意間洩漏機器學習模型或模型訓練資料的相關資訊。舉例來說,攻擊者可能會刻意破壞全域機器學習模型或聯邦式學習工作階段,也可能執行時間攻擊 (一種側通道攻擊),以收集訓練資料集大小的相關資訊。
針對聯邦學習實作最常見的威脅如下:
- 有意或無意記住訓練資料。您的聯邦學習實作或攻擊者可能會刻意或無意間以難以處理的方式儲存資料。攻擊者可能可以透過反向工程儲存的資料,收集全域機器學習模型或過往幾輪聯邦學習作業的相關資訊。
- 從全域機器學習模型的更新中擷取資訊。在聯合學習過程中,攻擊者可能會對聯盟擁有者從參與機構和裝置收集的全球機器學習模型更新進行逆向工程。
- 聯盟擁有者可能會影響回合。遭入侵的聯盟擁有者可能會控制惡意孤島或裝置,並啟動一輪聯合學習作業。在回合結束時,遭入侵的聯盟擁有者可能會比較惡意孤島產生的更新與從合法參與機構和裝置收集的更新,藉此收集相關資訊。
- 參與機構和裝置可能會危害全域 ML 模型。在聯合學習過程中,攻擊者可能會產生惡意或無關的更新,試圖惡意影響全域機器學習模型的效能、品質或完整性。
為降低本節所述威脅的影響,建議您遵循下列最佳做法:
- 調整模型,盡量減少記憶訓練資料。
- 導入隱私權保護機制。
- 定期稽核全域機器學習模型、您打算分享的機器學習模型、訓練資料,以及您為達成聯邦學習目標而實作的基礎架構。
- 實作安全匯總演算法,處理參與機構產生的訓練結果。
- 使用公用金鑰基礎架構安全地產生及發布資料加密金鑰。
- 將基礎架構部署至機密運算平台。
聯盟擁有者也必須採取下列額外步驟:
- 如果是跨孤島架構,請驗證每個參與機構的身分和每個孤島的完整性;如果是跨裝置架構,請驗證每個裝置的身分和完整性。
- 限制參與機構和裝置可產生的全域機器學習模型更新範圍。
可靠性
本節說明使用本文中的任一參考架構,在 Google Cloud上設計及建構聯邦學習平台時,應考量的設計因素。
在 Google Cloud上設計聯合學習架構時,建議您遵循本節的指引,提升工作負載的可用性和擴充性,並協助架構抵禦中斷和災害。
GKE:GKE 支援多種叢集類型,可根據工作負載的可用性需求和預算進行調整。舉例來說,您可以建立地區叢集,將控制層和節點分散到地區內的多個區域,也可以建立區域叢集,將控制層和節點放在單一區域。跨孤島和跨裝置參考架構都依賴區域 GKE 叢集。如要進一步瞭解建立 GKE 叢集時應考量的層面,請參閱叢集設定選項。
視叢集類型,以及控制層和叢集節點在區域和可用區的分布情況而定,GKE 提供不同的災害復原功能,可保護工作負載免於可用區和區域中斷的影響。如要進一步瞭解 GKE 的災難復原功能,請參閱「Architecting disaster recovery for cloud infrastructure outages: Google Kubernetes Engine」。
Google Cloud Load Balancing:GKE 支援多種負載平衡方式,可將流量導向工作負載。透過 Kubernetes Gateway 和 Kubernetes Service API 的 GKE 實作項目,您可以自動佈建及設定 Cloud Load Balancing,安全可靠地公開 GKE 叢集中執行的工作負載。
在這些參考架構中,所有傳入和傳出流量都會通過 Cloud Service Mesh 閘道。有了這些閘道,您就能嚴格控管 GKE 叢集內外的流量流向。
跨裝置聯合學習的可靠性挑戰
跨裝置聯合學習有許多可靠性方面的挑戰,這些挑戰在跨孤島情境中不會遇到。其中包括:
- 裝置連線不穩或間歇性中斷
- 裝置儲存空間有限
- 運算和記憶體有限
連線不穩定可能會導致下列問題:
- 更新過時和模型差異:裝置連線不穩定時,本機模型更新可能會過時,與全域模型的目前狀態相比,代表的資訊已過時。匯總過時的更新可能會導致模型發散,也就是全域模型因訓練過程不一致而偏離最佳解決方案。
- 貢獻內容不平均和模型偏誤:間歇性通訊可能會導致參與裝置的貢獻內容分布不均。連線品質不佳的裝置可能提供的更新較少,導致基礎資料分配的代表性不平衡。這種不平衡可能會導致全域模型偏向來自連線較穩定的裝置的資料。
- 通訊負擔和耗電量增加:間歇性通訊可能會導致通訊負擔增加,因為裝置可能需要重新傳送遺失或損毀的更新。這個問題也可能增加裝置的耗電量,尤其是電池續航力有限的裝置,因為這類裝置可能需要維持連線較長的時間,才能確保順利傳輸更新。
為協助減輕間歇性通訊造成的影響,本文中的參考架構可搭配 FCP 使用。
執行 FCP 通訊協定的系統架構可設計為符合下列需求:
- 處理長時間執行的回合。
- 啟用推測執行 (在預期很快就會有足夠的用戶端加入的情況下,即使尚未達到所需數量,也可以開始執行回合)。
- 讓裝置選擇要參與的工作。這種做法可啟用不放回抽樣等功能,也就是每個母體樣本單位只有一次選取機會的抽樣策略。這種做法有助於減少貢獻不均和模型偏誤
- 可擴充,適用於差異化隱私 (DP) 和可信匯總 (TAG) 等去識別化技術。
為減輕裝置儲存空間和運算能力有限的問題,建議採用下列技術:
- 瞭解可執行聯邦學習運算的最高容量
- 瞭解特定時間可保留的資料量
- 設計用戶端聯合學習程式碼,在用戶端可用的運算和 RAM 內運作
- 瞭解儲存空間用盡的影響,並實作相關程序來管理儲存空間
成本最佳化
本節提供指引,說明如何盡量降低在 Google Cloud 上建立及執行聯邦式學習平台時的成本,而您可使用這項參考架構建立該平台。這項指引適用於本文所述的兩種架構。
在 GKE 上執行工作負載時,您可以根據工作負載的資源需求,佈建及設定叢集,進一步提升環境的成本效益。此外,這項功能還可啟用動態重新設定叢集和叢集節點的功能,例如自動調度叢集節點和 Pod 資源,以及適當調整叢集大小。
如要進一步瞭解如何降低 GKE 環境的成本,請參閱「在 GKE 上執行最具成本效益的 Kubernetes 應用程式的最佳做法」。
提升作業效率
本節說明使用這個參考架構在 Google Cloud上建立及執行聯邦式學習平台時,應考慮哪些因素來提高效率。本指南適用於本文所述的兩種架構。
為提高聯邦式學習架構的自動化和監控程度,建議您採用 MLOps 原則,也就是機器學習系統環境中的 DevOps 原則。導入機器學習運作代表您提倡自動化及監控建構機器學習系統的各步驟,包括整合、測試、發布、部署和基礎架構管理。如要進一步瞭解機器學習運作,請參閱「機器學習運作:機器學習的持續推送軟體更新與自動化管線」。
效能最佳化
本節說明使用這個參考架構在 Google Cloud上建立及執行聯邦式學習平台時,應考慮哪些因素來提升工作負載的效能。本指南適用於本文所述的兩種架構。
GKE 支援多項功能,可自動和手動調整 GKE 環境的大小和規模,以滿足工作負載需求,並協助您避免過度佈建資源。舉例來說,您可以使用 Recommender 生成洞察資料和建議,進而最佳化 GKE 資源用量。
思考如何擴充 GKE 環境時,建議您設計短期、中期和長期計畫,瞭解如何擴充環境和工作負載。舉例來說,您打算在幾週、幾個月和幾年內,如何擴大 GKE 服務範圍?事先規劃有助於充分運用 GKE 提供的擴充性功能、最佳化 GKE 環境,以及降低成本。如要進一步瞭解如何規劃叢集和工作負載的可擴縮性,請參閱「關於 GKE 可擴縮性」。
如要提升機器學習工作負載的效能,您可以採用 Cloud Tensor Processing Unit (Cloud TPU)。這是 Google 設計的 AI 加速器,經過最佳化調整,適合用於大型 AI 模型的訓練和推論作業。
部署作業
如要部署本文所述的跨孤島和跨裝置參考架構,請參閱 GitHub 存放區的聯邦學習 Google Cloud。
後續步驟
- 瞭解如何在 TensorFlow Federated 平台上實作聯合學習演算法。
- 瞭解聯合學習的進展和開放問題。
- 前往 Google AI 網誌,瞭解聯合學習技術。
- 觀看這部影片,瞭解 Google 如何使用聯合學習技術,透過去識別化的匯總資訊改善機器學習模型,同時確保隱私權不受侵犯。
- 請參閱「Towards Federated learning at scale」。
- 瞭解如何實作 MLOps 管線,管理機器學習模型的生命週期。
- 如要瞭解適用於 Google Cloud中 AI 和機器學習工作負載的架構原則和建議,請參閱 Well-Architected Framework 中的AI 和機器學習觀點。
- 如需更多參考架構、圖表和最佳做法,請瀏覽 Cloud 架構中心。
貢獻者
作者:
- Grace Mollison | 解決方案主管
- Marco Ferrari | 雲端解決方案架構師
其他貢獻者:
- Chloé Kiddon | 軟體工程師和經理
- Laurent Grangeau | 解決方案架構師
- Lilian Felix | 雲端工程師
- Christiane Peters | 雲端安全架構師