Apple M1基于Docker和Visual Studio code快速搭建Tensorflow的AI开发环境

1 Apple M1芯片介绍

1.1确认芯片类型

首先查看自己mac电脑的芯片类型,看是Intel,amd,还是苹果基于arm架构自研的arm64芯片,方法:在终端命令行输入uname -a 或者uname -m  可以看到芯片内核架构,M1是arm64芯片架构;tensorflow官方镜像截止2022-02-08为止,不支持arm64架构芯片(查看支持芯片类型请参照docker简介部分),程序运行时会提示内核崩溃,无法运行程序;

2 Docker简介

2.1介绍

docker官方正式介绍在此不再赘述,可以查看docker官网www.docker.com,推荐中文学习网站https://www.runoob.com/docker/docker-tutorial.html

2.2 docker4大核心:

(1)image镜像:提供基础的程序运行环境,只读,不可编辑更改;以“层”的方式进行叠加起来的运行环境;

(2)container容器:镜像启动时,在镜像层的基础之上新增的一层,可编辑,用于存储用户自己的内容;

(3)volume挂载卷:用于持久性地存储数据;容器运行时,容器产生的数据都会存储在volume中,否则当容器停止运行后,数据就会丢失;

(4)compose组件;多容器运行,连接的关键部分;

2.3优点

我主要看中它的几个优点:(1)实现不同的开发环境之间的隔离以及开发环境和物理机之间的隔离,实现即插即用,用完即毁,减小对物理机资源的占用;(2)利用别人制作好的镜像快速搭建开发环境,免去各种繁杂的安装配置过程,如果想对镜像做优化配置,可以给予别人现有的镜像基础之上,利用dockerfile的构建镜像方法,构建自己想要镜像。(3)利用docker官方提供的远程开发环境搭建流程,可以快速集成到Visual studio code中进行开发;开发后可以上传到自己在docker官网上的存储库;(4)团队协作时,团队成员可以快速地配置统一的开发环境,避免环境不一致导致的bug,简单、高效;

3 Visual studio code介绍

一句话:简直就是一款开发神奇。微软出品的开发工具,简称vs code或者vsc,自从微软收购了GitHub后,vsc无缝连接GitHub、微软云Azure、Docker,各种神插件,特别有一个叫GitHub copilot的自动编程的插件,根据你编写的函数名称能自动编写函数体内容,根据编写语句上下文,能自动编写相关语句,开发效率提高十倍不止。具体介绍参见https://copilot.github.com/

4 Tensorflow镜像介绍

不用过多介绍,谷歌出品的AI开发框架;

5 搭建流程

5.1安装基础工具

根据需要该注册账号就注册

(1)去docker官网(https://www.docker.com/products/personal)下载安装桌面版的Docker工具。

Docker

(2)去官网https://code.visualstudio.com/下载安装vs code工具。


vs code


推荐安装的扩展插件



5.2寻找可用镜像

docker官网找能用的tensorflow镜像 https://hub.docker.com/  

如果缺少第3步,则搜索出来排在前面的是Google官方提供的镜像,但都不支持Apple M1芯片。

图中排在前3个都是经过官方认证的,应该是优先推荐的,但是经过实际测试,镜像中安装的python版本太多,导致编程时,import导入模块时(例如tensorflow和numpy模块)提示模块找不到,但是在终端命令行或者用jupyter浏览器编程,就是没有问题的。对于想要体验vscode智能编程的我,果断放弃了这种镜像。于是有了下面第4步

不过很期待谷歌官方发布支持arm64,且能支持GPU的镜像

5.3基于docker搭建远程开发环境




至此远程Tensorflow的AI开发环境已搭建完毕,为啥说远程呢?因为docker是一种C/S架构,docker 容器环境本质上是服务端,本机电脑是客户端,所以说是远程开发环境。

6 需要识别和避免的坑

(1)TensorFlow镜像和电脑芯片不匹配问题;

(2)启动镜像,登录容器时,非root用户无root权限时,vscode无法远程进入容器,启动命令行终端失败;此问题是由于镜像创建时,在dockefile中指定的,若不指定,则默认为root用户,但这在后期团队开发过程中产生次生问题,解决方法:①docker run时指定root用户,如docker run -u root ……;② dockefile 中给非root用户赋予root权限;③找符合要求的镜像,如上文推荐的;

 (3)镜像中由于层层叠加,按照python版本过多,编辑器编程导入模块时无法识别模块;

(4)加载卷volume无法保存数据:由于镜像中设置的工作文件路径是home/tensorflow,且只能在此文件夹下进行编辑,而从docker官方进入vscode,会默认创建一个home/vscode的文件,所有新增的数据文件都只能保存在此文件夹下,由于没有编辑home/vscode的权限,所以无法保存新增数据。解决方法,对home/vscode进行授权,在终端命令行输入sudo chmod 777 vscode  提示输入密码password时,输入tensorflow即可;因为镜像在创建账户tensorflow时,把密码和账户设置成了一样。

(5)镜像中会存在一些依赖库缺失的情况,自己可以手动用pip命令安装依赖,但是当镜像容器停止,重新启动后,新安装的依赖会丢失,此时,需要需要自己重新打包,生成自己专属的镜像,

以上就这些吧,用了近一周时间,踩了很多坑,尝试了很多模式,找到了此种我认为简单、好用的方法,欢迎私信交流。

7 如何基于别人现有的镜像,打包、构建自己专属的镜像

此部分属于升级部分,请私聊

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容