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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

KubeFATE: 用云原生技术赋能联邦学习(一)

發(fā)布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KubeFATE: 用云原生技术赋能联邦学习(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題圖攝于北海公園

聯(lián)邦學(xué)習(xí)是AI領(lǐng)域一個新興的方向,被認(rèn)為是 AI 領(lǐng)域最重要的研究和應(yīng)用趨勢之一。聯(lián)邦學(xué)習(xí)可在用戶之間進(jìn)行聯(lián)合建模,構(gòu)造精確的人工智能模型,同時數(shù)據(jù)不用離開機(jī)構(gòu),可以保證雙方數(shù)據(jù)的隱私安全性,應(yīng)用前景廣闊,因此,聯(lián)邦學(xué)習(xí)已經(jīng)得到越來越廣泛的關(guān)注。

我們 VMware 云原生實(shí)驗(yàn)室的團(tuán)隊(duì)參與了聯(lián)邦學(xué)習(xí)開源項(xiàng)目 FATE 和 KubeFATE 的開發(fā),文后附有作者相關(guān)課程的視頻。

(本文作者系VMware云原生實(shí)驗(yàn)室工程師陳家豪,FATE / KubeFATE開源聯(lián)邦學(xué)習(xí)項(xiàng)目的貢獻(xiàn)者。)

概述

FATE (Federated AI Technology Enabler)?是由微眾銀行發(fā)起的一個聯(lián)邦學(xué)習(xí)框架,能有效幫助多個機(jī)構(gòu)在滿足用戶隱私保護(hù)、數(shù)據(jù)安全和政府法規(guī)的要求下,進(jìn)行數(shù)據(jù)使用和建模。由于其系統(tǒng)的分布式特性,使用中存在一定門檻。鑒于此,VMware 聯(lián)合微眾銀行一起開發(fā)了 KubeFATE 項(xiàng)目,致力于降低 FATE 的使用門檻和系統(tǒng)運(yùn)維成本。本文將首先分析FATE 的整體架構(gòu),幫助讀者理解各部件的作用;然后將展示如何從一臺 Linux 機(jī)器開始,通過 KubeFATE 一步一步來搭建聯(lián)邦學(xué)習(xí)的實(shí)驗(yàn)環(huán)境。?

FATE?整體架構(gòu)

一個正常工作的 FATE 集群里面包含了若干組件,其中有些負(fù)責(zé)任務(wù)調(diào)度、有些負(fù)責(zé)存儲,各個組件各司其職,聯(lián)合起來一起完成任務(wù)。一個 FATE 集群所包含的組件如下圖所示。

?FATE整體架構(gòu)圖

各個服務(wù)的功能描述如下:

  • FATE Flow:該服務(wù)分為 Client 和Server兩部分,其中Client部分由用戶使用,用于向FATE集群提交聯(lián)邦學(xué)習(xí)任務(wù);FATE Flow Server是FATE集群對外提供服務(wù)的入口,同時它也負(fù)責(zé)調(diào)度、執(zhí)行用戶提交的任務(wù)請求和協(xié)調(diào)任務(wù)參與方。

  • MySQL:與任務(wù)相關(guān)的一些元數(shù)據(jù),如創(chuàng)建時間,狀態(tài)都會存在MySQL中。

  • EGG/ROLL:向訓(xùn)練任務(wù)提供了分布式計算和存儲能力。

  • Meta Service:一組數(shù)據(jù)或一個文件,可以被切片并分布在不同的Egg上,Meta service負(fù)責(zé)管理和定位文件的切片信息。

  • Federation:由于聯(lián)邦學(xué)習(xí)的特殊性質(zhì),在訓(xùn)練中,各個參與方之間往往會進(jìn)行若干次數(shù)據(jù)互換。該服務(wù)為訓(xùn)練任務(wù)提供發(fā)送和接受數(shù)據(jù)的功能。

  • Proxy:該服務(wù)是一個反向代理,是FATE集群對外(訓(xùn)練其他參與方)的唯一入口。

  • FATE Board:向用戶提供訓(xùn)練任務(wù)的可視化。

  • FATE Serving:在線推理服務(wù),用戶可以把訓(xùn)練好模型推送到該服務(wù)后作在線推理。

KubeFATE簡介

由于FATE集群包含了眾多服務(wù),并且每一個服務(wù)的啟動都需要不同的配置和依賴,以至于使用存在一定門檻。此外由于多個服務(wù)之間有相互依賴,一個服務(wù)的失敗可能導(dǎo)致整個集群的不可用,這給系統(tǒng)的運(yùn)維也帶來了一定的挑戰(zhàn)。基于這個出發(fā)點(diǎn),VMware和微眾聯(lián)合開發(fā)了KubeFATE項(xiàng)目,致力于解決聯(lián)邦學(xué)習(xí)的使用門檻和降低運(yùn)維的成本。目前,KubeFATE和FATE最新的版本為1.3.0,本文后續(xù)所有與它們相關(guān)的操作都將基于此版本。

由于KubeFATE使用了容器技術(shù)對FATE進(jìn)行了封裝,因此相對于傳統(tǒng)的安裝部署,使用KubeFATE有以下優(yōu)點(diǎn):

1.????使用簡單,免除缺失依賴軟件包的煩惱。

2.????配置方便,一個配置文件就能部署多套集群。

3.????管理靈活,可按需增減集群規(guī)模。

4.????適用于云環(huán)境。

目前KubeFATE支持使用Docker-Compose和Kubernetes兩種方式來部署和管理FATE集群,分別面向了測試開發(fā)和生產(chǎn)這兩種使用場景。本文主要關(guān)注于測試開發(fā)的部署,因此在接下來的部署中會使用Docker-Compose這種方式。Kubernetes的方式將另文敘述。

KubeFATE的工作流程主要分成兩部分,分別是

  • 根據(jù)用戶定義的配置文件生成FATE集群的啟動文件。

  • 拷貝啟動文件到指定機(jī)器上,并使用docker-compose命令啟動容器。

  • 通常,負(fù)責(zé)生成啟動文件的服務(wù)器稱為部署機(jī),而負(fù)責(zé)運(yùn)行容器的服務(wù)器稱為目標(biāo)機(jī),部署機(jī)和目標(biāo)機(jī)是在邏輯上的劃分。在本文中,部署機(jī)和目標(biāo)機(jī)為同一臺機(jī)器。

    部署機(jī)與目標(biāo)機(jī)關(guān)系圖

    使用KubeFATE和Docker-Compose來部署單節(jié)點(diǎn)聯(lián)邦學(xué)習(xí)平臺

    由于KubeFATE使用了容器作為其底層工具,因此在開始使用KubeFATE之前,這里也簡單介紹下容器、Docker等相關(guān)的概念。

    容器也稱Linux Container(簡稱LXC),它是與系統(tǒng)其他部分隔離開的一系列進(jìn)程,主要由Namespace和Cgroup兩大機(jī)制來保證實(shí)現(xiàn)。其優(yōu)點(diǎn)是:

    1.????高資源利用與隔離

    2.????輕量級

    3.????跨Linux發(fā)行

    Docker屬于 LXC的一種封裝,提供簡單易用的容器使用接口。它可以將應(yīng)用程序與依賴,打包在一個文件里面,而當(dāng)程序要運(yùn)行的時候,Docker就為這個程進(jìn)行一些配置,使得該進(jìn)程與系統(tǒng)中的其他進(jìn)程隔離。總體來說,Docker向用戶提供了一套簡單易用的接口,以至于用戶可以很方便使用容器。而Docker-Compose 是對Docker 容器進(jìn)行編排的工具,通過它用戶可以很方便的配置和管理多個容器。至于更多關(guān)于Docker的詳細(xì)資料,請大家參考Docker 官網(wǎng):https://www.docker.com

    文章接下來的部分將跟大家分享單節(jié)點(diǎn)的聯(lián)邦學(xué)習(xí)平臺如何部署。?目標(biāo) 部署一套FATE集群,集群內(nèi)擁有“FATE整體架構(gòu)”中描述的所有部件。具體部署架構(gòu)如下所示:

    部署架構(gòu)圖

    ?準(zhǔn)備工作

    一臺機(jī)器,虛擬機(jī)或者物理機(jī),推薦2CPU,8GB內(nèi)存,Linux操作系統(tǒng)并且能聯(lián)網(wǎng),并以root用戶登錄。下文中部署機(jī)器和目標(biāo)機(jī)器為同一臺,IP地址為192.168.1.1 。

    在目標(biāo)機(jī)上安裝Docker

    #?curl?-fsSL?https://get.docker.com?-o?get-docker.sh #?sh?get-docker.sh #?usermod -aG docker $(whoami) #?exec?$SHELL ?

    驗(yàn)證安裝

    #?docker?versionClient:?Docker?Engine?-?CommunityVersion:???????????19.03.7API?version:???????1.40Go?version:????????go1.12.17Git?commit:????????7141c199a2Built:?????????????Wed?Mar??4?01:22:36?2020OS/Arch:???????????linux/amd64Experimental:??????falseServer:?Docker?Engine?-?Community Engine:Version:??????????19.03.7API?version:??????1.40?(minimum?version?1.12)Go?version:???????go1.12.17Git?commit:???????7141c199a2Built:????????????Wed?Mar??4?01:21:08?2020 在目標(biāo)機(jī)上安裝Docker-Compose?#?curl?-L?"https://github.com/docker/compose/releases/download/1.25.4/docker-compose-#(uname?-s)-#(uname?-m)"?-o?/usr/local/bin/docker-compose#?chmod?+x?/usr/local/bin/docker-compose ?驗(yàn)證安裝#?docker-compose?versiondocker-compose?version?1.25.4,?build?unknown docker-py?version:?4.2.0 CPython?version:?2.7.17 OpenSSL?version:?OpenSSL?1.1.1??11?Sep?2018 ?在目標(biāo)機(jī)上下載Docker 鏡像(可選)?對于國內(nèi)用戶來說從Dockerhub上下載鏡像可能會比較慢,可用以下方式代替: #?wget?https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate_1.3.0-images.tar.gz?#?docker?load?-i?fate_1.3.0-images.tar.gz? 驗(yàn)證下載鏡像#?docker?images REPOSITORY?????????????????????????TAG? federatedai/egg????????????????????1.3.0-release federatedai/fateboard??????????????1.3.0-release federatedai/meta-service???????????1.3.0-release federatedai/python?????????????????1.3.0-release federatedai/roll???????????????????1.3.0-release federatedai/proxy??????????????????1.3.0-release federatedai/federation?????????????1.3.0-release federatedai/serving-server?????????1.2.2-release federatedai/serving-proxy??????????1.2.2-release redis??????????????????????????????5 mysql??????????????????????????????8 在部署機(jī)上下載并解壓Kubefate1.3的kubefate-docker-compose.tar.gz資源包#?curl?-OL?https://github.com/FederatedAI/KubeFATE/releases/download/v1.3.0/kubefate-docker-compose.tar.gz#?tar?-xzf?kubefate-docker-compose.tar.gz 在部署機(jī)上定義需要部署的實(shí)例數(shù)目進(jìn)入docker-deploy目錄#?cd?docker-deploy/編輯parties.conf如下#?vi?parties.conf?user=root??????????????????????????????????? dir=/data/projects/fate????????????????????? partylist=(10000)?????????????????????? partyiplist=(192.168.1.1)???????#此處替換為目標(biāo)機(jī)的IP servingiplist=(192.168.1.1)?????#此處替換為目標(biāo)機(jī)的IP exchangeip= ?在部署機(jī)上執(zhí)行生成集群啟動文件腳本?#?bash?generate_config.sh??????????#?生成部署文件 ?在部署機(jī)上執(zhí)行啟動集群腳本?#?bash?docker_deploy.sh?all命令輸入后需要用戶輸入兩次目標(biāo)機(jī)的root用戶的密碼 在目標(biāo)機(jī)上驗(yàn)證集群狀態(tài)?#?docker?psCONTAINER?ID????????IMAGE?????????????????????????????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS?????????????????????????????????NAMES f8ae11a882ba????????fatetest/fateboard:1.3.0-release??????"/bin/sh?-c?'cd?/dat…"???5?days?ago??????????Up?5?days???????????0.0.0.0:8080->8080/tcp????????????????confs-10000_fateboard_1 d72995355962????????fatetest/python:1.3.0-release?????????"/bin/bash?-c?'sourc…"???5?days?ago??????????Up?5?days???????????9360/tcp,?9380/tcp????????????????????confs-10000_python_1 dffc70fc68ac????????fatetest/egg:1.3.0-release????????????"/bin/sh?-c?'cd?/dat…"???7?days?ago??????????Up?7?days???????????7778/tcp,?7888/tcp,?50001-50004/tcp???confs-10000_egg_1 dc23d75692b0????????fatetest/roll:1.3.0-release???????????"/bin/sh?-c?'cd?roll…"???7?days?ago??????????Up?7?days???????????8011/tcp??????????????????????????????confs-10000_roll_1 7e52b1b06d1a????????fatetest/meta-service:1.3.0-release???"/bin/sh?-c?'java?-c…"???7?days?ago??????????Up?7?days???????????8590/tcp??????????????????????????????confs-10000_meta-service_1 50a6323f5cb8????????fatetest/proxy:1.3.0-release??????????"/bin/sh?-c?'cd?/dat…"???7?days?ago??????????Up?7?days???????????0.0.0.0:9370->9370/tcp????????????????confs-10000_proxy_1 4526f8e57004????????redis:5???????????????????????????????????"docker-entrypoint.s…"???7?days?ago??????????Up?7?days???????????6379/tcp??????????????????????????????confs-10000_redis_1 586f3f2fe191????????fatetest/federation:1.3.0-release?????"/bin/sh?-c?'cd?/dat…"???7?days?ago??????????Up?7?days???????????9394/tcp??????????????????????????????confs-10000_federation_1 ec434dcbbff1????????mysql:8???????????????????????????????????"docker-entrypoint.s…"???7?days?ago??????????Up?7?days???????????3306/tcp,?33060/tcp???????????????????confs-10000_mysql_1 68b1d6c68b6c????????federatedai/serving-proxy:1.2.2-release????"/bin/sh?-c?'java?-D…"???32?hours?ago????????Up?32?hours?????????0.0.0.0:8059->8059/tcp,?0.0.0.0:8869->8869/tcp,?8879/tcp???serving-10000_serving-proxy_1 7937ecf2974e????????redis:5????????????????????????????????????"docker-entrypoint.s…"???32?hours?ago????????Up?32?hours?????????6379/tcp???????????????????????????????????????????????????serving-10000_redis_1 00a8d98021a6????????federatedai/serving-server:1.2.2-release???"/bin/sh?-c?'java?-c…"???32?hours?ago????????Up?32?hours?????????0.0.0.0:8000->8000/tcp?????????????????????????????????????serving-10000_serving-server_1 ?在目標(biāo)機(jī)上驗(yàn)證集群是否正確安裝#?docker?exec?-it?confs-10000_python_1?bash#?cd?/data/projects/fate/python/examples/toy_example#?python?run_toy_example.py?10000?10000?1如果測試通過,屏幕將顯示類似如下消息:"2019-08-29?07:21:25,353?-?secure_add_guest.py[line:96]?-?INFO:?begin?to?init?parameters?of?secure?add?example?guest" "2019-08-29?07:21:25,354?-?secure_add_guest.py[line:99]?-?INFO:?begin?to?make?guest?data" "2019-08-29?07:21:26,225?-?secure_add_guest.py[line:102]?-?INFO:?split?data?into?two?random?parts" "2019-08-29?07:21:29,140?-?secure_add_guest.py[line:105]?-?INFO:?share?one?random?part?data?to?host" "2019-08-29?07:21:29,237?-?secure_add_guest.py[line:108]?-?INFO:?get?share?of?one?random?part?data?from?host" "2019-08-29?07:21:33,073?-?secure_add_guest.py[line:111]?-?INFO:?begin?to?get?sum?of?guest?and?host" "2019-08-29?07:21:33,920?-?secure_add_guest.py[line:114]?-?INFO:?receive?host?sum?from?guest" "2019-08-29?07:21:34,118?-?secure_add_guest.py[line:121]?-?INFO:?success?to?calculate?secure_sum,?it?is?2000.0000000000002"

    通過上述步驟,一個FATE的實(shí)例(單方)部署完成,后續(xù)文章將介紹如何部署多方互聯(lián)進(jìn)行聯(lián)邦學(xué)習(xí)的訓(xùn)練。

    常見問題

    如果前文的“toy_example”嘗試數(shù)次后仍沒有跑過,可以考慮是否因CPU版本太舊以至于指令集不支持的問題。具體操作如下:

    1.????進(jìn)入egg容器#?docker?exec?-it?confs-xxxx_egg_1?bash2.????查看storage-service日志#?cat?storage-service-cxx/logs/error.log

    如果日志出現(xiàn)“Illegal instruction (core dumped)”則考慮使用CPU更新點(diǎn)的服務(wù)器重新部署。如果該日志沒有輸出則可以通過docker log的方式逐個查看服務(wù)日志以定位具體問題。

    (未完待續(xù))

    日前,本文作者陳家豪為大家分享的聯(lián)邦學(xué)習(xí)直播課程視頻回顧:

    相關(guān)文章:

    聯(lián)邦學(xué)習(xí):人工智能的最后一公里


    如果你對聯(lián)邦學(xué)習(xí)感興趣,可申請加入“KubeFATE開源社區(qū)群”交流,入群需要真實(shí)身份,并改昵稱:姓名@單位。請先關(guān)注“亨利筆記”公眾號,在公眾號后臺發(fā)送"FATE"信息即可。

    總結(jié)

    以上是生活随笔為你收集整理的KubeFATE: 用云原生技术赋能联邦学习(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。