張小白帶你體驗(yàn)MindSpore 1.1的新特性:?jiǎn)喂?jié)點(diǎn)緩存Cache(1)CPU環(huán)境下的Cache體驗(yàn)

      網(wǎng)友投稿 850 2022-05-30

      使用ModelArts進(jìn)行深度學(xué)習(xí)訓(xùn)練的朋友們可能會(huì)有一點(diǎn)感觸,就是自己使用的對(duì)象存儲(chǔ)OBS一會(huì)兒就把套餐給用完了。這個(gè)原因其實(shí)很簡(jiǎn)單,因?yàn)樯窠?jīng)網(wǎng)絡(luò)的訓(xùn)練中,需要大量反復(fù)地從OBS讀取訓(xùn)練數(shù)據(jù),對(duì)于目前OBS的計(jì)費(fèi)方式而言,存取一次就算一次的量:

      LENET的MNIST是一個(gè)28X28像素的灰度手寫(xiě)數(shù)字的圖片,有60000條訓(xùn)練圖片、10000條測(cè)試圖片;

      ResNet50的Cifar10是一個(gè)32X32像素的10個(gè)類別的物體類別的圖片,有50000張訓(xùn)練圖片、10000張測(cè)試圖片

      如果多訓(xùn)練幾輪,讀寫(xiě)次數(shù)可想而知,會(huì)非常大。

      所以張小白也因此向ModelArts和OBS的官方提過(guò)一些非官方的建議:比如推出ModelArts和OBS融合的套餐,在ModelArts內(nèi)部訪問(wèn)OBS時(shí)能夠減免一點(diǎn)OBS的訪問(wèn)費(fèi)用(大家可能都想不到,OBS除了PUT/COPY要收費(fèi),GET/LIST也要收費(fèi),也就是說(shuō),你使用OBS客戶端看了一下目錄結(jié)構(gòu),就算訪問(wèn)次數(shù)了。。。)。

      本來(lái)張小白以為華為會(huì)把心思放在優(yōu)化收費(fèi)策略上,沒(méi)想到MindSpore團(tuán)隊(duì)另辟蹊徑,在MindSpore 1.1推出了一個(gè)單節(jié)點(diǎn)緩存特性(以下簡(jiǎn)稱Cache),讓開(kāi)發(fā)者在使用MindSpore的過(guò)程中,能夠?qū)?shù)據(jù)集緩存到本機(jī)內(nèi)存中,這樣子減少對(duì)數(shù)據(jù)集文件的讀寫(xiě)。(這樣子是不是在拆OBS的臺(tái)呢。。張小白不禁浮想聯(lián)翩ing。。。)

      當(dāng)然了,以上這段其實(shí)不是原來(lái)折騰cache過(guò)程貼的內(nèi)容,是張小白柔情加工了下。具體的折騰過(guò)程可參見(jiàn)論壇帖:

      【1.23-1.24 | MindSpore第五期兩日集訓(xùn)營(yíng)】實(shí)踐作業(yè)9 ?https://bbs.huaweicloud.com/forum/thread-104914-1-1.html

      【1.23-1.24 | MindSpore第五期兩日集訓(xùn)營(yíng)】實(shí)踐作業(yè)10 https://bbs.huaweicloud.com/forum/thread-104974-1-1.html

      本文是論壇帖的進(jìn)一步整理的版本。

      Cache的視頻教程

      參見(jiàn): https://www.bilibili.com/video/BV1y5411E7dL

      MindSpore官網(wǎng)的Cache介紹

      參見(jiàn):https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.1/cache.html

      Cache簡(jiǎn)介:

      單節(jié)點(diǎn)數(shù)據(jù)緩存是MindSpore1.1提供的加速功能。針對(duì)AI訓(xùn)練而言,要么是訓(xùn)練的數(shù)據(jù)集需要經(jīng)過(guò)多輪epoch計(jì)算的反復(fù)讀取,要么每輪訓(xùn)練時(shí)要經(jīng)過(guò)同樣的數(shù)據(jù)增強(qiáng)(如decode、resize等操作)。如果每次都是反復(fù)加載,反復(fù)計(jì)算同樣的內(nèi)容,非常耗時(shí),顯得資源非常浪費(fèi),所以MindSpore在1.1版本開(kāi)始提供了緩存功能。

      緩存目前只支持單節(jié)點(diǎn)緩存,即緩存服務(wù)器和客戶端都在同一臺(tái)機(jī)器上,而且緩存服務(wù)是使用共享內(nèi)存實(shí)現(xiàn)的。

      實(shí)操過(guò)程:

      實(shí)操的過(guò)程包含:

      1.Cache的啟動(dòng),使用,查看,關(guān)閉等操作;

      2.使用Cache在ubuntu的CPU環(huán)境下裝載LENET的MNIST數(shù)據(jù)集到Cache,并完成LENET的網(wǎng)絡(luò)訓(xùn)練。

      3.使用Cache在ubuntu的GPU環(huán)境下裝載Resnet50的Cifar10數(shù)據(jù)集到Cache,并完成ResNet50的網(wǎng)絡(luò)訓(xùn)練。

      (其中第三步篇幅較多,會(huì)另起一篇文字)

      那讓張小白帶著大家開(kāi)始這段奇妙的旅程吧。。。。

      (一)Cache的基本操作

      在操作之前先確認(rèn)已經(jīng)成功地在Ubuntu 18.04機(jī)器上安裝了MindSpore 1.1.0 for CPU版本。如不清楚如何安裝可參考 這篇文字進(jìn)行安裝:張小白帶你快速體驗(yàn)MindSpore V1.0(For ubuntu 18.04)https://bbs.huaweicloud.com/blogs/198324? ,當(dāng)然要記得將版本從1.0換為1.1.

      在/etc/profile 設(shè)置環(huán)境變量

      export PYTHON_HOME=/usr/python3

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PYTHON_HOME/lib/python3.7/site-packages/mindspore:$PYTHON_HOME/lib/python3.7/site-packages/mindspore/lib:$PYTHON_HOME/lib

      export PATH=$PATH:$PYTHON_HOME/bin

      source? /etc/profile執(zhí)行使得環(huán)境變量生效。

      啟動(dòng)cache_admin

      cache_admin --start

      (回答作業(yè)9的第一個(gè)問(wèn)題:?Cache server如何啟動(dòng)?cache_admin --start,當(dāng)然后面可以帶各種參數(shù)。但是不帶也可以啟動(dòng))

      (回答作業(yè)9的第二個(gè)問(wèn)題:Cache server創(chuàng)建時(shí)的默認(rèn)port端口號(hào)是什么??緩存服務(wù)器的端口號(hào),默認(rèn)為50052,但是也可以通過(guò)cache_admin --start --port 10052改為10052之類的)

      看看50052端口是否偵聽(tīng)了:

      netstat -an |grep 50052

      已經(jīng)起來(lái)了。。。

      (回答作業(yè)9的第三個(gè)問(wèn)題: Cache client實(shí)體在創(chuàng)建時(shí),其如何獲取?

      通過(guò)cache_admin -g可以創(chuàng)建緩存會(huì)話(session),系統(tǒng)會(huì)返回session_id.

      可以通過(guò)cache_admin --list_sessions看到所有的session_id

      而cache client可以在客戶端python腳本中指定session_id,以便連接到服務(wù)器的緩存實(shí)例。如:

      import mindspore.dataset as ds

      test_cache = ds.DatasetCache(session_id=4154400928, size=0, spilling=True)

      查看緩存數(shù)據(jù):

      銷毀緩存數(shù)據(jù):

      cache_admin --destroy_session 304191202

      再重新檢查緩存數(shù)據(jù):

      可見(jiàn)session已被清除。

      cache_admin --stop

      關(guān)閉緩存服務(wù)器

      說(shuō)個(gè)TIPS:

      MindSpore已經(jīng)內(nèi)置了 很多常用的數(shù)據(jù)集,比如Mnist,Cifar10,Cifar100,Pascal-VOC,COCO等等。。https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.1/dataset_loading.html

      開(kāi)發(fā)者能做的事情應(yīng)該只是改一下處理數(shù)據(jù)集的函數(shù)名就可以了。其他的內(nèi)容MindSpore工程師應(yīng)該都幫你做好了。

      比如將Cifar10改為Minst,那么“一般只需要改? Cifar10Dataset? -》MnistDataset ,參數(shù)有些小改動(dòng)就ok了。”,例如:

      “data = ds.MnistDataset(dataset_dir=dataset_dir, num_samples=4, shuffle=False, num_parallel_workers=1, cache=test_cache)”

      也就是說(shuō),是先有了常用的數(shù)據(jù)集,然后開(kāi)發(fā)cache的老師們?cè)谶@個(gè)常用數(shù)據(jù)集的基礎(chǔ)上增加了cache能力。

      這個(gè)是mindspore內(nèi)置的特性,用于提升性能,并不需要用戶額外實(shí)現(xiàn)。所以正常使用xxDataset加載就可以了。如果有cache參數(shù),可以試著打開(kāi),看看是否能提升性能。

      (二)使用Cache完成MNIST數(shù)據(jù)集的LENET訓(xùn)練

      先git clone代碼倉(cāng)

      git clone https://gitee.com/mindspore/mindspore.git

      進(jìn)入lenet的目錄

      cd ~/mindspore/model_zoo/official/cv/lenet

      按照 張小白帶你快速體驗(yàn)MindSpore V1.0(For ubuntu 18.04)https://bbs.huaweicloud.com/blogs/198324? Part Five:使用Mindspore進(jìn)行LENET訓(xùn)練 的 http://yann.lecun.com/exdb/mnist/? 鏈接下載MNIST數(shù)據(jù)集。

      把解壓好的數(shù)據(jù)集放入 MNIST_DATA目錄:

      (1)不帶Cache的訓(xùn)練

      張小白帶你體驗(yàn)MindSpore 1.1的新特性:?jiǎn)喂?jié)點(diǎn)緩存Cache(1)CPU環(huán)境下的Cache體驗(yàn)

      使用原有的dataset.py

      然后開(kāi)始跑train.py

      跑完了,花了304秒左右。(5分鐘多一點(diǎn))

      然后做個(gè)評(píng)估:

      好像一切正常,沒(méi)啥問(wèn)題。

      (2)帶Cache的訓(xùn)練

      修改腳本src/dataset.py,加入cache的相關(guān)語(yǔ)句。

      在上面紅框中的代碼修改為以下的樣子:(帶cache處理的部分)

      兩者對(duì)比,也就是做了如下的修改:

      if?"SESSION_ID"?in?os.environ:

      session_id?=?int(os.environ['SESSION_ID'])

      else:

      raise?RuntimeError("Testcase?requires?SESSION_ID?environment?variable")

      test_cache?=?ds.DatasetCache(session_id=session_id,?size=0,?spilling=False)

      mnist_ds?=?ds.MnistDataset(data_path,?cache=test_cache)

      #?mnist_ds?=?ds.MnistDataset(data_path)

      這樣就能用上cache了。。

      并且將ckpt改了名字,重新建了一個(gè)新的ckpt的空目錄。

      而且,重啟了cache_admin且重置了SESSION_ID.

      開(kāi)始跑python train.py

      在train.py跑訓(xùn)練的過(guò)程中,隨時(shí)跟蹤cache_admin的session狀態(tài),一共6萬(wàn)張MNIST的圖片,如上圖所示,Mem cached Disk在不停地增加。

      直到加載到60000為止。

      這個(gè)應(yīng)該說(shuō)明是用到cache了。

      等著帶著cache的腳本跑完。

      總共花了396秒(6分半鐘多一點(diǎn))。比不帶cache的還要慢一點(diǎn)。。。

      小數(shù)據(jù)量可能并不能體現(xiàn)出cache的優(yōu)勢(shì)。。。不過(guò)這至少能說(shuō)明帶cache的數(shù)據(jù)集是可以跑通的。。。

      (未完待續(xù))

      MindSpore Python 昇騰

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:深入掌握 SAP Fiori Elements 工作原理的前提條件:理解 Smart Field
      下一篇:【Kubernetes系列】第1篇 架構(gòu)及組件介紹
      相關(guān)文章
      亚洲网址在线观看你懂的| 最新国产AV无码专区亚洲| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲尹人香蕉网在线视颅| 亚洲国产精品一区二区三区在线观看| 亚洲宅男天堂在线观看无病毒 | 亚洲影视自拍揄拍愉拍| 亚洲综合久久成人69| 亚洲免费在线播放| 亚洲色图古典武侠| 亚洲欧洲精品国产区| 亚洲国产精品人久久电影| 亚洲老熟女@TubeumTV| 亚洲黄色在线观看网站| 亚洲国产模特在线播放| 亚洲成av人片不卡无码| 亚洲av无码一区二区三区观看| 2020天堂在线亚洲精品专区| 亚洲午夜无码久久久久软件| 亚洲精品久久久久无码AV片软件| 亚洲Av永久无码精品一区二区| 狼人大香伊蕉国产WWW亚洲| 噜噜噜亚洲色成人网站| 亚洲中文无韩国r级电影| 亚洲中久无码不卡永久在线观看| 亚洲人成网7777777国产| 亚洲av综合avav中文| 在线免费观看亚洲| 亚洲一区二区三区高清视频| 中国亚洲呦女专区| 国产成人亚洲综合在线| 亚洲Av无码国产情品久久| 国产亚洲美女精品久久久| 亚洲国产精品成人精品无码区| 精品无码一区二区三区亚洲桃色| 亚洲人和日本人jizz| 亚洲精品女同中文字幕| 亚洲精品成人区在线观看| 久久亚洲精品中文字幕三区| 2022年亚洲午夜一区二区福利| 国产v亚洲v天堂a无|