日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

一起来DIY一个人工智能实验室吧

發(fā)布時(shí)間:2024/3/13 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一起来DIY一个人工智能实验室吧 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

閱讀原文

摘要:?俗話說(shuō),工欲善其事,必先利其器,這篇文章我們將告訴大家如何搭建一個(gè)AI實(shí)驗(yàn)室,并穿插一些小Demo,為后面的AI學(xué)習(xí)實(shí)踐做好準(zhǔn)備。

一、DIY一個(gè)AI實(shí)驗(yàn)室:

原材料的選擇

我們的AI入門(mén)課程已經(jīng)講過(guò)兩節(jié)了,前面我們講了AI的概念、算法、工具等內(nèi)容,第三節(jié)我們會(huì)介紹一些實(shí)際操作的內(nèi)容。俗話說(shuō),工欲善其事,必先利其器,這篇文章我們將告訴大家如何搭建一個(gè)AI實(shí)驗(yàn)室,并穿插一些小Demo,為后面的AI學(xué)習(xí)實(shí)踐做好準(zhǔn)備。



現(xiàn)在可供選擇的AI開(kāi)發(fā)框架很多,推薦大家從Tensorflow開(kāi)始上手,原因后面會(huì)說(shuō)。另外,在“高階版”的AI實(shí)驗(yàn)室中,我們使用了Kubernetes + Docker做分布式訓(xùn)練的運(yùn)行環(huán)境,所以推薦各位同學(xué)使用64位的Ubuntu 16.04或更高版本的操作系統(tǒng)。如果只是想玩玩“單機(jī)版”,那也可以使用Windows和Mac,操作過(guò)程和Ubuntu差別不大。

AI實(shí)踐肯定要寫(xiě)程序,各位同學(xué)肯定都有自己喜歡的IDE或者編輯器,但是編寫(xiě)AI程序,和編寫(xiě)其他程序有個(gè)很大的區(qū)別,那就是這些程序都需要實(shí)時(shí)的輸出一些圖表以供調(diào)試或者查看運(yùn)行結(jié)果,我們之前用的大多數(shù)開(kāi)發(fā)工具都沒(méi)有這個(gè)能力,所以現(xiàn)在大家都用Jupyter Notebook來(lái)做AI程序、尤其是機(jī)器學(xué)習(xí)程序的開(kāi)發(fā)。

綜上,我們將使用Tensorflow、Kubernetes和Jupyter Notebook做AI實(shí)驗(yàn)室的“原材料”,下面我們分別說(shuō)下選型依據(jù)。

  • 為什么使用Tensorflow做開(kāi)發(fā)框架:

  • 為什么使用Kubernetes做AI實(shí)驗(yàn)室的基礎(chǔ)運(yùn)行環(huán)境:

  • 為什么使用Jupyter Notebook做開(kāi)發(fā)工具:

  • 二、搭建“單機(jī)版”的AI實(shí)驗(yàn)室

    搭建“單機(jī)版”的AI實(shí)驗(yàn)室非常簡(jiǎn)單,只要三步即可:

    安裝Python和Virtualenv,這里我們使用Python3:
    sudo apt-get install python3-pip python3-dev python-virtualenv
    創(chuàng)建并激活Virtualenv環(huán)境(工作目錄名為AILab,也可以換個(gè)自己喜歡的名字):
    virtualenv --system-site-packages -p python3 AILab
    source AILab/bin/activate
    安裝Tensorflow和Jupyter Notebook,以及用來(lái)調(diào)試Tensorflow程序的Tensorboard插件:
    pip3 install tensorflow
    pip3 install jupyter
    pip3 install jupyter-tensorboard



    這里我們使用了Virtualenv,以免搞亂潔癖碼農(nóng)的Python環(huán)境。上述步驟完成后,在Virtualenv的提示符下執(zhí)行:

    (AILab)$ jupyter notebook
    即可啟動(dòng)Jupyter Notebook

    如果有同學(xué)需要使用GPU,那么還需要安裝NVIDIA的CUDA工具包、cuDNN和分析工具接口,會(huì)比較麻煩。

    有需要的同學(xué)可以參考鏈接:
    https://www.tensorflow.org/install

    需要在Mac和Windows上安裝Tensorflow或者安裝過(guò)程中遇到疑難雜癥的同學(xué)也可以查詢?cè)撴溄?。關(guān)于Jupyter Notebook和Tensorboard插件的問(wèn)題。

    可以查詢鏈接:
    http://jupyter.readthedocs.io/en/latest/install.html?
    https://github.com/lspvic/jupyter_tensorboard

    現(xiàn)在打開(kāi)jupyter notebook命令輸出中的鏈接,就可以瀏覽器里編寫(xiě)Tensorflow程序了。為了盡快上手,我們先跳過(guò)Tensorflow的基礎(chǔ)概念,直接運(yùn)行一個(gè)來(lái)自?https://github.com/sankit1/cv-tricks.com?的小Demo。

    首先我們點(diǎn)擊Jupyter Notebook Files標(biāo)簽頁(yè)右上角的New按鈕創(chuàng)建一個(gè)Python 3 記事本。Jupyter Notebook支持以“!”開(kāi)頭運(yùn)行本地命令,寫(xiě)好命令,選中灰色的編輯框(Jupyter Notebook稱其為Cell),點(diǎn)擊工具欄的Run按鈕即可執(zhí)行。我們首先取出cv-tricks的代碼,再安裝opencv、sklearn、scipy等三個(gè)數(shù)學(xué)工具包。


    然后我們?cè)倩氐紽iles標(biāo)簽頁(yè),打開(kāi)路徑為cv-tricks.com/Tensorflow-tutorials/tutorial-2-image-classifier/train.py的Python文件。

    由于這種打開(kāi)方式是不能運(yùn)行代碼的,所以我們?cè)賱?chuàng)建一個(gè)Python 3記事本,把train.py的文件內(nèi)容復(fù)制過(guò)來(lái),然后執(zhí)行。

    相信此時(shí)一定有好學(xué)的同學(xué)到cv-tricks的GitHub里去看了,可能有人會(huì)發(fā)現(xiàn)里面有training_data和testing_data兩個(gè)目錄,里面有很多貓貓狗狗的照片,實(shí)際上train.py在做的事情就是創(chuàng)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò),然后讀入training_data目錄下的貓狗照片進(jìn)行如何區(qū)分貓狗的訓(xùn)練。

    通過(guò)程序的輸出我們可以看到識(shí)別的準(zhǔn)確度從最開(kāi)始的50%逐步上升、直至收斂。50%的準(zhǔn)確度即為瞎猜,這個(gè)輸出很直觀的展現(xiàn)了機(jī)器學(xué)習(xí)的過(guò)程。

    這個(gè)程序需要跑上一段時(shí)間,根據(jù)機(jī)器的性能不同和室內(nèi)溫度,半小時(shí)到一小時(shí)都有可能,同學(xué)們?cè)谧约哼M(jìn)行實(shí)驗(yàn)的時(shí)候請(qǐng)耐心等待。另外,GitHub上的代碼有個(gè)小bug,這里故意不說(shuō),相信細(xì)心的同學(xué)都能知道如何修改。



    程序運(yùn)行過(guò)程中會(huì)生成幾個(gè)文件,就是Tensorflow的模型文件,里面存儲(chǔ)的就是訓(xùn)練好的神經(jīng)網(wǎng)絡(luò),后面就用這些文件去區(qū)分貓狗。



    等訓(xùn)練結(jié)束之后,我們可以用predict.py加載這個(gè)模型,用它識(shí)別一些網(wǎng)上找來(lái)的貓狗圖片。

    識(shí)別效果還算可以,如果有同學(xué)在自己的測(cè)試?yán)锇l(fā)現(xiàn)識(shí)別出錯(cuò),那也很正常,畢竟這只是一個(gè)很簡(jiǎn)單的Demo,訓(xùn)練數(shù)據(jù)很少,訓(xùn)練時(shí)間也很短,準(zhǔn)確率做不到太高。

    現(xiàn)在我們的第一個(gè)AI程序就跑起來(lái)了,“單機(jī)版”的AI實(shí)驗(yàn)室建設(shè)完畢。

    三、搭建“高階版”的AI實(shí)驗(yàn)室

    接下來(lái)才是本次課程的重頭戲——AI實(shí)驗(yàn)室的“高階版”。

    正如前文所述,AI實(shí)驗(yàn)室的“高階版”是一個(gè)分布式訓(xùn)練環(huán)境,一來(lái)可以進(jìn)行多機(jī)并行訓(xùn)練以提高訓(xùn)練速度,二來(lái)可以通過(guò)多租戶方式集約化的使用資源,適合學(xué)校、企業(yè)中的小團(tuán)隊(duì)一起使用。

    “高階版”的AI實(shí)驗(yàn)室底層使用了Kubernetes和Docker,我們公眾號(hào)的老朋友應(yīng)該對(duì)這兩個(gè)東西都比較了解,如果有同學(xué)不了解那也沒(méi)關(guān)系,暫且把它們當(dāng)作一個(gè)支撐Tensorflow分布訓(xùn)練的資源調(diào)度器就好。整體架構(gòu)見(jiàn)下圖:

    說(shuō)到這里,我們需要介紹一下和Tensorflow分布式訓(xùn)練有關(guān)的一些概念,首先是兩種訓(xùn)練方式——數(shù)據(jù)并行和模型并行:


    其次數(shù)據(jù)并行又分為同步數(shù)據(jù)并行和異步數(shù)據(jù)并行:



    現(xiàn)階段我們推薦使用同步數(shù)據(jù)并行方式,所以各位同學(xué)暫且對(duì)其他三個(gè)概念有些印象即可,以后碰到的時(shí)候再深入研究也不遲。

    接下來(lái)介紹搭建“高階版”AI實(shí)驗(yàn)室的步驟,要比“單機(jī)版”復(fù)雜不少。首先需要準(zhǔn)備幾臺(tái)服務(wù)器,并在各服務(wù)器上安裝64位的Ubuntu 16.04或更高版本。

    如果只有一臺(tái)服務(wù)器那也沒(méi)關(guān)系,本課程介紹的方法有一個(gè)很大的優(yōu)勢(shì)就是可擴(kuò)展性,可以先一臺(tái)服務(wù)器湊合用,等以后富裕了、服務(wù)器多了,再添加進(jìn)來(lái)也很容易。但是安裝后一定要注意以下三點(diǎn):

    各服務(wù)器的Hostname、MAC地址和product_uuid(/sys/class/dmi/id/product_uuid)要唯一。
    各服務(wù)都要關(guān)閉Swap,方法是在/etc/fstab中將Swap行注釋掉。
    各服務(wù)器都要關(guān)閉防火墻,方法是執(zhí)行ufw disable命令。

    然后各服務(wù)器重啟,使上述修改生效。

    準(zhǔn)備工作完成后即可開(kāi)始安裝Docker和Kubernetes的集群部署工具Kubeadm,每臺(tái)服務(wù)器上都要裝,分為三步:

  • 添加來(lái)自Google的安裝源:
  • -s?https://packages.cloud.google.com/apt/doc/apt-key.gpg?| apt-key add -
  • cat </etc/apt/sources.list.d/kubernetes.list
    deb?http://apt.kubernetes.io/?kubernetes-xenial main
    EOF

  • 刷新安裝源并安裝必要工具:
    apt-get update
  • apt-get install -y apt-transport-https curl

  • 安裝Docker和Kubeadm:
    apt-get install -y docker.io kubeadm kubelet kubectl
  • 接下來(lái)是初始化管理節(jié)點(diǎn),選一臺(tái)你最喜歡的服務(wù)器完成以下步驟,如果你只有一臺(tái)服務(wù)器,那這臺(tái)就既做管理節(jié)點(diǎn)也做工作節(jié)點(diǎn)。

  • 執(zhí)行命令kubeadm init --pod-network-cidr=10.244.0.0/16,該命令的執(zhí)行過(guò)程中會(huì)下載幾個(gè)Docker鏡像,時(shí)間可能會(huì)比較久,等看到“Your Kubernetes master has initialized successfully!”輸出后,就說(shuō)明命令執(zhí)行成功。執(zhí)行過(guò)程中可能會(huì)遇到“你懂的”問(wèn)題,哎,沒(méi)辦法,做IT就是這樣舉步維艱,我們后面看看能不能在國(guó)內(nèi)做個(gè)鏡像庫(kù),為各位同學(xué)提供便利。
  • 步驟1完成后,如果你使用的是非root用戶,那么需要執(zhí)行以下三行命令:
  • mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

    如果你使用的是root用戶,則需要設(shè)置環(huán)境變量:
    export KUBECONFIG=/etc/kubernetes/admin.conf
    為了日后方便,可以將該環(huán)境變量添加到shell的profile中。

  • 接下來(lái)安裝Kubernetes的網(wǎng)絡(luò)虛擬化add-on,這里我們使用的是Flannel,安裝方法是:
  • a) 首先修改一個(gè)網(wǎng)絡(luò)參數(shù),執(zhí)行命令sysctl net.bridge.bridge-nf-call-iptables=1,并將其添加到/etc/sysctl.conf文件中。
    b) 安裝Kubernetes的網(wǎng)絡(luò)虛擬化add-on,執(zhí)行命令:

    kubectl apply -f \ https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

    過(guò)程中還是會(huì)遇到“你懂的”問(wèn)題……

    上述步驟完成之后,管理節(jié)點(diǎn)就初始化成功了,如果有同學(xué)覺(jué)得單獨(dú)用一臺(tái)服務(wù)器做管理節(jié)點(diǎn)有點(diǎn)浪費(fèi),或者是有同學(xué)只有一臺(tái)服務(wù)器,既要做管理節(jié)點(diǎn)又要做工作節(jié)點(diǎn),那么請(qǐng)執(zhí)行命令:kubectl taint nodes --all node-role.kubernetes.io/master-。

    接下來(lái)要做的就是添加工作節(jié)點(diǎn)了,剛才執(zhí)行kubeadm init命令的時(shí)候輸出里有一行內(nèi)容類似于:

    kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

    把這行復(fù)制到其他服務(wù)器上用root用戶執(zhí)行,即可將這臺(tái)服務(wù)器作為工作節(jié)點(diǎn)添加到集群之中,只有一臺(tái)服務(wù)器的同學(xué)可以等富裕了之后再執(zhí)行。

    到此一個(gè)Kubernetes集群就完成了,如果有同學(xué)在操作過(guò)程中遇到疑難雜癥。

    請(qǐng)查詢鏈接:
    https://kubernetes.io/docs/tasks/tools/install-kubeadm/?
    https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

    接下來(lái)要做的就是安裝Kubeflow了,還記得這個(gè)是什么嗎?前文提過(guò),Kubeflow就是Google提供的整合Kubernetes和Tensorflow的一站式AI開(kāi)源方案。由于Kubeflow使用了ksonnet作為部署工具,所以我們首先要到https://ksonnet.io/#get-started下載ksonnet的命令行工具。這里順便提一句,ksonnet是個(gè)非常強(qiáng)大的工具,也比較復(fù)雜,感興趣的同學(xué)可以查看他們的官網(wǎng)探明究竟,這里我們就不展開(kāi)講解了。

    現(xiàn)在我們開(kāi)始配置kubeflow,步驟比較多。

    初始化工作目錄,目錄名為AILab_Advanced,執(zhí)行命令:

    ks init AILab_Advanced

    創(chuàng)建配置文件模板,需要以下步驟:
    切換工作目錄,執(zhí)行命令:cd AILab_Advanced
    下載基本配置文件,執(zhí)行以下命令:

    VERSION=v0.1.2 ks registry add kubeflow \ github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow ks pkg install kubeflow/core@${VERSION} ks pkg install kubeflow/tf-serving@${VERSION} ks pkg install kubeflow/tf-job@${VERSION}

    這里我們使用的是0.1.2版本,過(guò)段時(shí)間會(huì)發(fā)布0.2版本,各位同學(xué)可以根據(jù)需要修改VERSION變量的值。
    創(chuàng)建配置文件模板,執(zhí)行命令:
    ks generate core kubeflow-core --name=kubeflow-core
    創(chuàng)建Kubeflow基礎(chǔ)服務(wù),需要的步驟:
    創(chuàng)建名為AILab的運(yùn)行環(huán)境,執(zhí)行命令:
    ks env add AILab
    創(chuàng)建名為AILab的租戶,執(zhí)行命令:
    kubectl create namespace AILab
    創(chuàng)建kubeflow基礎(chǔ)服務(wù),執(zhí)行以下命令:
    ks env set AILab --namespace AILab
    ks apply AILab -c kubeflow-core
    創(chuàng)建過(guò)程中依然需要下載幾個(gè)Docker鏡像,各位同學(xué)在操作過(guò)程中請(qǐng)耐心等待。

    上述步驟執(zhí)行完畢后,AI實(shí)驗(yàn)室的”高階版”就基本完工了,可以通過(guò)瀏覽器使用,訪問(wèn)前需要映射一下端口,執(zhí)行下面兩條命令:

    PODNAME=`kubectl get pods --namespace=AILab --selector="app=tf-hub" \ --output=template --template="{{with index .items 0}}{{.metadata.name}}{{end}}"` kubectl port-forward --namespace=AILab $PODNAME 8000:8000

    然后就可以通過(guò)8000端口訪問(wèn)了,首頁(yè)如下圖:


    因?yàn)檫@里沒(méi)有啟用安全模式,所以用戶名和密碼可以隨便填。AI實(shí)驗(yàn)室的“高階版”是支持多用戶的,會(huì)為不同的用戶名啟動(dòng)獨(dú)立的實(shí)驗(yàn)環(huán)境,登錄后的效果如下圖:

    ![image](https://yqfile.alicdn.com/c1d1dcba94d1509b6e65deffc08cf5c6f5639ec8.png)

    點(diǎn)擊Start My Server按鈕即可啟動(dòng)自己的Jupyter Notebook:

    ![image](https://yqfile.alicdn.com/86f9155dbc37cb9d054a794149f4fdf62ec3fd1a.png)

    這里可以選擇你喜歡的Tensorflow版本,并填寫(xiě)所需的資源參數(shù)。這些鏡像都比較大,下載的時(shí)間會(huì)比較久。

    ![image](https://yqfile.alicdn.com/6fd9c9bea72c808d42162906675eea27519af138.png)

    由于首次啟動(dòng)需要下載鏡像,如果網(wǎng)絡(luò)環(huán)境不好,這一步很可能會(huì)超時(shí)失敗,但是后臺(tái)的鏡像下載不會(huì)中斷,等下載完成,再去啟動(dòng)Jupyter Notebook就很快了。此時(shí)會(huì)出現(xiàn)我們熟悉的Jupyter Notebook首頁(yè):

    ![image](https://yqfile.alicdn.com/fdfa8aae60154cea16824efa154f3416693f3dfa.png)

    現(xiàn)在我們就可以像在“單機(jī)版”里那樣編寫(xiě)代碼了。每個(gè)Jupyter Notebook都運(yùn)行在一個(gè)獨(dú)立的Docker容器中,用戶之間不會(huì)互相干擾,還可以通過(guò)New按鈕創(chuàng)建一個(gè)Terminal,登陸到容器內(nèi)部操作。

    ![image](https://yqfile.alicdn.com/2f3c3ec928bfb22ea7a4273082af7b40517ae5f7.png)

    前面稍微展示了一下如何使用這個(gè)“多租戶”的Jupyter Notebook,接下來(lái)開(kāi)始介紹如何發(fā)起Tensorflow的分布式訓(xùn)練。Kubeflow提供了一個(gè)分布式訓(xùn)練的發(fā)起頁(yè)面,在該頁(yè)面填寫(xiě)訓(xùn)練名稱、鏡像地址、入口程序、所需資源和節(jié)點(diǎn)數(shù)等參數(shù)即可發(fā)起訓(xùn)練,如下圖所示:




    發(fā)起訓(xùn)練之后還可以通過(guò)Web頁(yè)面查看運(yùn)行狀態(tài),在這個(gè)頁(yè)面中可以看到kubeflow通過(guò)鏡像創(chuàng)建了一系列的容器,每個(gè)容器即為訓(xùn)練集群的一個(gè)節(jié)點(diǎn)。


    這里使用了一個(gè)Google提供的測(cè)試鏡像,我們也可以自己制作鏡像,只需要在“多租戶”的Jupyter Notebook里把程序調(diào)試好,然后把該Jupyter Notebook所在的容器保存成一個(gè)Docker鏡像即可。

    另外需要注意的是,在編寫(xiě)Tensorflow程序的時(shí)候,也需要為分布式環(huán)境做一些適配。Tensorflow使用一個(gè)名為tf.train.ClusterSpec的constructor描述訓(xùn)練集群結(jié)構(gòu),由于在“高階版”的AI實(shí)驗(yàn)室中,集群結(jié)構(gòu)是在發(fā)起分布式訓(xùn)練的時(shí)候動(dòng)態(tài)設(shè)置的,所以就不能像以前那也寫(xiě)死在代碼里,需要對(duì)代碼做一些修改,如下圖所示:

    這里的關(guān)鍵是名為T(mén)F_CONFIG的環(huán)境變量,kubeflow里有個(gè)有個(gè)名為tf-operator的組件,可以把它當(dāng)成一個(gè)Tensorflow和Kubernetes之間的適配器,它的作用之一就是在發(fā)起分布式訓(xùn)練時(shí)將集群結(jié)構(gòu)寫(xiě)到TF_CONFIG這個(gè)環(huán)境變量里,訓(xùn)練集群的每個(gè)節(jié)點(diǎn)里都會(huì)寫(xiě),然后就可以在程序中通過(guò)讀取這個(gè)變量來(lái)動(dòng)態(tài)配置集群結(jié)構(gòu)了。

    各位同學(xué)可以參考鏈接:

    https://github.com/kubeflow/tf-operator/blob/master/examples/tf_sample/tf_sample/tf_smoke.py

    中的實(shí)例代碼,試著把前面“單機(jī)版”的貓狗識(shí)別程序改成分布式,成功后一定會(huì)很有成就感。

    到此“高階版”的AI實(shí)驗(yàn)室就介紹完畢了,一定有同學(xué)會(huì)覺(jué)得這個(gè)實(shí)驗(yàn)室比較簡(jiǎn)陋。確實(shí)如此,一來(lái)是kubeflow還處于非常早期的開(kāi)發(fā)階段,二來(lái)是一個(gè)完善的AI實(shí)驗(yàn)室還需要在kubeflow之上做很多產(chǎn)品化工作。

    我司目前也在做這方面的工作,計(jì)劃把AI實(shí)驗(yàn)室和我司的云平臺(tái)產(chǎn)品整合起來(lái),形成一個(gè)AI實(shí)驗(yàn)室云服務(wù),總體架構(gòu)如下圖所示:


    并在此之上構(gòu)建AI生態(tài):

    原文發(fā)布時(shí)間為:2018-07-05
    本文作者: 宋瀟男
    本文來(lái)自云棲社區(qū)合作伙伴“EAWorld”,了解相關(guān)信息可以關(guān)注“EAWorld”。


    總結(jié)

    以上是生活随笔為你收集整理的一起来DIY一个人工智能实验室吧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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