1. 问题背景
- 七月底原来的 Win10 笔记本跑深度学习项目 Demo 调试的时候,由于温度过高没有及时发现,意外烧了电脑主板。去维修也无果,索性直接用教育优惠下单了一台 MacBook Pro(M1 Pro芯片)。原项目要求搭配
Python 3.6
+Tensorflow 1.15.0
+keras 2.3.1
,同时由于原来的 Win10本是搭载了 NVIDIA MX150 显卡,同时安装了CUDA 10.1
+cuDNN 7.6
。 - 然而新款的 MacBook Pro(M1 Pro芯片)本身自带的最低版本的
Python
为3.8.x
,仅支持tensorflow 2.x
。于是考虑通过最新版本的Anaconda
(截至2022.8月已原生适配了M1 Pro芯片),但是下载完发现最低支持的Python
版本为3.9.x
。无奈只好转向其他途径,寻找方法,终于在一篇文章里找到了可行的方法。
M1 Pro(Apple Silicon)安装TensorFlow 1.X版本
2. 解决方法
-
总体方法:借助
Docker
构建python3.5.10
和tensorflow1.11.0
的镜像,在Pycharm
中使用该环境即可。- 安装
Docker
:注意选择Apple Silicon
版本。 - 安装
Pycharm
:注意选择Apple Silicon
版本。
- 安装
3. Docker Hub
- 拉取
arm64
版本的python3.5.10
的docker
镜像。
注意选择3.5.10-buster
版本,不要选择slim
版本(精简版)。
Docker Hub - 在 MacBook Pro 终端输入镜像拉取指令:
docker pull python:3.5.10-buster
- 在 docker dashboard 的
Images
里面可以看到该镜像。 - 点击
run
,在Containers
里面创建对应的容器。 - 在
Containers
里面创建对应的容器那一行点击命令行
图标,开启命令行工具。
- 在 docker dashboard 的
至此,我们有了一个 python3.5.10
的基本环境了。
⭐ 注:在刚打开的容器的命令行里输入 python -V
可查看当前环境的 python 版本。
4. h5py
由于 Tensorflow
依赖 h5py
,而 h5py
依赖 HDF5
。因此,我们必须先编译安装HDF5
,否则使用 pip
安装 h5py
会报错。
⭐ 在第三步打开的 docker 命令行
内执行如下操作。
- 从官网下载HDF5源码包:
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz
- 进入下载目录解压源码包:
tar -zxvf hdf5-1.10.5.tar.gz
- 进入解压文件夹,执行配置、编译和安装:
cd hdf5-1.10.5/
./configure --prefix=/usr/include/hdf5
make
make install
- 更新安装源:
apt-get update
安装vim(镜像中没安装):
apt-get install vim
- 配置环境变量:
vim ~/.bashrc
* 在末尾加上两行:
* export PATH=$PATH:/usr/include/hdf5/bin
* export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/include/hdf5/lib
- 使配置生效:
bash ~/.bashrc
- 安装 Cpython,解决层层依赖问题:
pip install Cython
- 安装 protobuf(需要指定版本,最新版只支持3.7+):
原博主是安装的 3.20.1 版本,而我实际安装的时候发现找不到 3.20 的版本,因此安装了 3.19.x
pip install protobuf==3.20.1
- 升级(可能) pip、wheel、setuptools:
pip install --upgrade pip setuptools wheel
- 安装 libhdf5-dev (如果还报错的话):
apt-get install libhdf5-dev
- 安装 h5py:
pip3 install h5py
至此,h5py 安装完毕!
5. Tensorflow 1.11.0
由于官方没有提供基于 arm 架构的 Tensorflow 1.x 版,只能在 GitHub
上找第三方编译的版本。
这里使用的是 tensorflow1.11.0 aarch64
版本。
tensorflow-1.11.0-cp35-none-linux_aarch64.whl
- 执行如下执行,下载 .whl 文件:
wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.11.0/tensorflow-1.11.0-cp35-none-linux_aarch64.whl
- 安装 tensorflow 1.11.0:
pip install tensorflow-1.11.0-cp35-none-linux_aarch64.whl
至此,tensorflow 1.11.0 安装完毕!
6. 打包新镜像
接下来,需要将操作完的容器打包成新镜像。
⭐ 注意:接下来需要切换到系统命令行
,而不是前序步骤的 docker 命令行了!
docker commit [OPTIONS] CONTAINER(容器名称或者ID) [REPOSITORY[:TAG]]
-a : 提交的镜像作者
-c : 使用 Dockerfile 指令来创建镜像
-m : 描述
-p : 在 commit 时,将容器暂停
示例:
打包一个新镜像,其作者是 htl
,容器名称为 silly_swartz
。
tensorflow:1.11.0
中的 tensorflow
是 REPOSITORY
, 1.11.0
是TAG
。
docker commit -a htl -m "python3.5.10&tensorflow1.11.0" silly_swartz tensorflow:1.11.0
此时,可以在 docker 的 Images 内看到打包成功的新镜像,其 NAME
为 tensorflow
,TAG
为 1.11.0
7. 连接 Pycharm
在 Pycharm 中,选择 Preferences -> Project:xxx(xxx为你的项目名) -> Python Interpreter
。
下拉框里选择 show all
,选择 docker
,再选择刚创建的镜像(Server:Docker,Image name:tensorflow:1.11.0,Python interpreter path:python)。
至此,Python 3.5 + Tensorflow 1.11.0 环境就配置好了!
⭐ 注:可以写几行代码测试一下配置的环境是否为 Python 3.5
。
import sys
import tensorflow as tf
if __name__ == '__main__':
print(sys.version)
print(tf.__version__)
可以发现显示:
3.5.10(default, Sep 10 2020, 16:55:48)
[GCC 8.3.0]
1.11.0