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工具。
(2)去官网https://code.visualstudio.com/下载安装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 如何基于别人现有的镜像,打包、构建自己专属的镜像
此部分属于升级部分,请私聊