1 Apple M1芯片介紹
1.1確認(rèn)芯片類型
首先查看自己mac電腦的芯片類型罩句,看是Intel引颈,amd紊服,還是蘋果基于arm架構(gòu)自研的arm64芯片伦泥,方法:在終端命令行輸入uname -a 或者uname -m? 可以看到芯片內(nèi)核架構(gòu),M1是arm64芯片架構(gòu)芝雪;tensorflow官方鏡像截止2022-02-08為止减余,不支持arm64架構(gòu)芯片(查看支持芯片類型請參照docker簡介部分),程序運(yùn)行時會提示內(nèi)核崩潰惩系,無法運(yùn)行程序位岔;
2 Docker簡介
2.1介紹
docker官方正式介紹在此不再贅述,可以查看docker官網(wǎng)www.docker.com堡牡,推薦中文學(xué)習(xí)網(wǎng)站https://www.runoob.com/docker/docker-tutorial.html
2.2 docker4大核心:
(1)image鏡像:提供基礎(chǔ)的程序運(yùn)行環(huán)境抒抬,只讀,不可編輯更改晤柄;以“層”的方式進(jìn)行疊加起來的運(yùn)行環(huán)境擦剑;
(2)container容器:鏡像啟動時,在鏡像層的基礎(chǔ)之上新增的一層,可編輯惠勒,用于存儲用戶自己的內(nèi)容赚抡;
(3)volume掛載卷:用于持久性地存儲數(shù)據(jù);容器運(yùn)行時纠屋,容器產(chǎn)生的數(shù)據(jù)都會存儲在volume中涂臣,否則當(dāng)容器停止運(yùn)行后,數(shù)據(jù)就會丟失售担;
(4)compose組件赁遗;多容器運(yùn)行,連接的關(guān)鍵部分族铆;
2.3優(yōu)點
我主要看中它的幾個優(yōu)點:(1)實現(xiàn)不同的開發(fā)環(huán)境之間的隔離以及開發(fā)環(huán)境和物理機(jī)之間的隔離岩四,實現(xiàn)即插即用,用完即毀骑素,減小對物理機(jī)資源的占用炫乓;(2)利用別人制作好的鏡像快速搭建開發(fā)環(huán)境,免去各種繁雜的安裝配置過程献丑,如果想對鏡像做優(yōu)化配置,可以給予別人現(xiàn)有的鏡像基礎(chǔ)之上侠姑,利用dockerfile的構(gòu)建鏡像方法创橄,構(gòu)建自己想要鏡像。(3)利用docker官方提供的遠(yuǎn)程開發(fā)環(huán)境搭建流程莽红,可以快速集成到Visual studio code中進(jìn)行開發(fā)妥畏;開發(fā)后可以上傳到自己在docker官網(wǎng)上的存儲庫;(4)團(tuán)隊協(xié)作時安吁,團(tuán)隊成員可以快速地配置統(tǒng)一的開發(fā)環(huán)境醉蚁,避免環(huán)境不一致導(dǎo)致的bug,簡單鬼店、高效网棍;
3 Visual studio code介紹
一句話:簡直就是一款開發(fā)神奇。微軟出品的開發(fā)工具妇智,簡稱vs code或者vsc滥玷,自從微軟收購了GitHub后,vsc無縫連接GitHub巍棱、微軟云Azure惑畴、Docker,各種神插件航徙,特別有一個叫GitHub copilot的自動編程的插件如贷,根據(jù)你編寫的函數(shù)名稱能自動編寫函數(shù)體內(nèi)容,根據(jù)編寫語句上下文,能自動編寫相關(guān)語句杠袱,開發(fā)效率提高十倍不止尚猿。具體介紹參見https://copilot.github.com/
4 Tensorflow鏡像介紹
不用過多介紹,谷歌出品的AI開發(fā)框架霞掺;
5 搭建流程
5.1安裝基礎(chǔ)工具
根據(jù)需要該注冊賬號就注冊
(1)去docker官網(wǎng)(https://www.docker.com/products/personal)下載安裝桌面版的Docker工具谊路。
(2)去官網(wǎng)https://code.visualstudio.com/下載安裝vs code工具。
推薦安裝的擴(kuò)展插件
5.2尋找可用鏡像
docker官網(wǎng)找能用的tensorflow鏡像?https://hub.docker.com/??
如果缺少第3步菩彬,則搜索出來排在前面的是Google官方提供的鏡像缠劝,但都不支持Apple M1芯片。
圖中排在前3個都是經(jīng)過官方認(rèn)證的骗灶,應(yīng)該是優(yōu)先推薦的惨恭,但是經(jīng)過實際測試,鏡像中安裝的python版本太多耙旦,導(dǎo)致編程時脱羡,import導(dǎo)入模塊時(例如tensorflow和numpy模塊)提示模塊找不到,但是在終端命令行或者用jupyter瀏覽器編程免都,就是沒有問題的锉罐。對于想要體驗vscode智能編程的我,果斷放棄了這種鏡像绕娘。于是有了下面第4步
不過很期待谷歌官方發(fā)布支持arm64脓规,且能支持GPU的鏡像
5.3基于docker搭建遠(yuǎn)程開發(fā)環(huán)境
至此遠(yuǎn)程Tensorflow的AI開發(fā)環(huán)境已搭建完畢,為啥說遠(yuǎn)程呢险领?因為docker是一種C/S架構(gòu)侨舆,docker 容器環(huán)境本質(zhì)上是服務(wù)端,本機(jī)電腦是客戶端绢陌,所以說是遠(yuǎn)程開發(fā)環(huán)境挨下。
6 需要識別和避免的坑
(1)TensorFlow鏡像和電腦芯片不匹配問題;
(2)啟動鏡像脐湾,登錄容器時臭笆,非root用戶無root權(quán)限時,vscode無法遠(yuǎn)程進(jìn)入容器沥割,啟動命令行終端失敽睦病;此問題是由于鏡像創(chuàng)建時机杜,在dockefile中指定的帜讲,若不指定,則默認(rèn)為root用戶椒拗,但這在后期團(tuán)隊開發(fā)過程中產(chǎn)生次生問題似将,解決方法:①docker run時指定root用戶获黔,如docker run -u root ……;② dockefile 中給非root用戶賦予root權(quán)限在验;③找符合要求的鏡像玷氏,如上文推薦的;
?(3)鏡像中由于層層疊加腋舌,按照python版本過多盏触,編輯器編程導(dǎo)入模塊時無法識別模塊;
(4)加載卷volume無法保存數(shù)據(jù):由于鏡像中設(shè)置的工作文件路徑是home/tensorflow块饺,且只能在此文件夾下進(jìn)行編輯赞辩,而從docker官方進(jìn)入vscode,會默認(rèn)創(chuàng)建一個home/vscode的文件授艰,所有新增的數(shù)據(jù)文件都只能保存在此文件夾下辨嗽,由于沒有編輯home/vscode的權(quán)限,所以無法保存新增數(shù)據(jù)淮腾。解決方法糟需,對home/vscode進(jìn)行授權(quán),在終端命令行輸入sudo chmod 777 vscode? 提示輸入密碼password時谷朝,輸入tensorflow即可洲押;因為鏡像在創(chuàng)建賬戶tensorflow時,把密碼和賬戶設(shè)置成了一樣圆凰。
(5)鏡像中會存在一些依賴庫缺失的情況诅诱,自己可以手動用pip命令安裝依賴,但是當(dāng)鏡像容器停止送朱,重新啟動后,新安裝的依賴會丟失干旁,此時驶沼,需要需要自己重新打包,生成自己專屬的鏡像争群,
以上就這些吧回怜,用了近一周時間,踩了很多坑换薄,嘗試了很多模式玉雾,找到了此種我認(rèn)為簡單、好用的方法轻要,歡迎私信交流复旬。
7 如何基于別人現(xiàn)有的鏡像,打包冲泥、構(gòu)建自己專屬的鏡像
此部分屬于升級部分驹碍,請私聊