人工智能是21世纪初的一大热点。在某种程度上来说,20世纪末期人工神经网络算法模型的集中爆发,使计算机这个硅基产物拥有了自己的思维和想法。
人工智能的例子在我们身边屡见不鲜:
1. 交互,例如Apple的Siri,Samsung的Bixby;
安全识别,例如人脸识别,声纹识别;
2. 出行,例如Google和Tesla的自动驾驶;
3. 今日头条、抖音、快手、淘宝等软件都部署了算法,人工智能可以精准识别你的喜好,从而推送你喜欢的各种信息、商品、和广告等内容。
4. 一家在内地不存在的G公司在2014年启动了一项引世瞩目的项目——AlphaGO。AlphaGO是一个人工智能围棋软件,它及它的迭代版本(Go Master, Go Zero, AlphaZero)均无一例外的在人机对战取得全胜战绩。
5. 就在去年暑假,这家公司在微信推出了“猜画小歌”小程序。在这个小程序中,用户需要绘制图像,使G**le AI能在指定时间内识别出来。这个小程序一经发布,迅速引爆朋友圈。这个小程序,是基于全世界5000多万个手绘素描的数据集训练递归神经网络,实现识别图像的功能。
所以在人工智能方面做得“最好”的这家公司,于2015年11月9日在Apache 2.0开源许可证下发布了一个叫做TensorFlow的开源软件库,用于各种感知和语言理解任务的机器学习。
(根据2015年修订的《广告法》第九条 第三点,不得使用“国家级”、“最高级”、“最佳”等用语)
TensorFlow 简介
TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow™ 最初是由 Google Brain 团队(隶属于 Google 的 AI 部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。
TensorFlow 能干嘛?
作者:Eureka 来源:知乎
图像处理方面:
人脸识别方面:
在官方网站上,我们可以查询到已经有将近50家大型企业使用了这一款软件库。
安装流程
01 系统的选择
首先,根据官方文档说明:
TensorFlow官方在以下 64 位系统上测试过 TensorFlow 并且这些系统支持 TensorFlow:
- Ubuntu 16.04 或更高版本
- Windows 7 或更高版本
- macOS 10.12.6 (Sierra) 或更高版本(不支持 GPU)
- Raspbian 9.0 或更高版本
首先Windows的环境因为日常使用的原因,变得极为复杂和不稳定。Windows系统一旦出现错误,重装系统和各种软件够我装上两三天。
再者虽然我电脑上安装了macOS,也配置了Python生产环境,不过由于基于macOS的TensorFlow不支持GPU加速,十分浪费配置。
(macOS从最新的10.14 Mojave版本开始不支持CUDA(Compute Unified Device Architecture,统一计算架构。是由NVIDIA所推出的一种整合技术,是该公司对于GPGPU的正式名称)不知道Apple的人在想什么。)
Raspbian是“树莓派”的操作系统,暂时和我无缘。
所以对于我来说,唯一的选择是装一个Linux。Linux的衍生版本选择由自己的喜好决定。我装的是我最熟悉的Ubuntu,用的是Long-term support(LTS)版本(18.04.1)。
注意
在虚拟机环境下不支持GPU加速!
02 Python & pip
Ubuntu系统自带了Python 3.6版本。大家也可以通过以下代码检测安装。
sudo apt-get update
sudo apt-get install python3-dev python3-pip
03 Nvidia Driver
(只装CPU版本或者非Nvidia显卡的同学可以跳过这个步骤)
硬件要求
TF支持以下支持 GPU 的设备:
CUDA® 计算能力为 3.5 或更高的 NVIDIA® GPU 卡。
请参阅支持 CUDA 的 GPU 卡列表。
通过以下命令就可以获得Nvidia显卡驱动订阅源:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
通过以下命令来获取驱动列表:
sudo apt-cache search nvidia*
这里还有个命令可以自动识别你的显卡然后推荐驱动版本(一般都为最新版本):
ubuntu-drivers devices
可以看到系统给我推荐的是415版本的驱动。
通过以下命令安装显卡驱动:
sudo apt install nvidia-driver-415
安装成功后重启生效:
sudo reboot
或者
sudo shutdown -r now
重启后,使用以下命令检测显卡驱动是否成功安装:
sudo nvidia-smi
sudo nvidia-settings
04 Docker
官网上TensorFlow有两种安装软件包:pip和Docker
对于TensorFlow-GPU,官方更推荐使用Docker安装方式,我们来看看官方是怎么说的:
GPU 支持
TensorFlow GPU 支持需要各种驱动程序和库。为了简化安装并避免库冲突,建议您使用支持 GPU 的 TensorFlow Docker 映像(仅限 Linux)。此设置仅需要 NVIDIA® GPU 驱动程序。
Docker 是在 GPU 上运行 TensorFlow 的最简单方法,因为主机只需安装 NVIDIA® 驱动程序(无需安装 NVIDIA® CUDA® 工具包)。
安装 nvidia-docker 可启动支持 NVIDIA® GPU 的 Docker 容器。nvidia-docker 仅适用于 Linux,详情请参阅对应的平台支持常见问题解答了解详情。
如果采用pip软件包,我们则需要去配置:
- NVIDIA® GPU 驱动程序 – CUDA 9.0 需要 384.x 或更高版本。
- CUDA® 工具包 – TensorFlow 支持 CUDA 9.0。
- CUDA 工具包附带的 CUPTI。
- cuDNN SDK(7.2 及更高版本)
- (可选)NCCL 2.2,可实现多 GPU 支持。
- (可选)TensorRT 4.0,可缩短在某些模型上进行推断的延迟并提高吞吐量。
最主要的原因就是如果使用pip,我们需要去配置CUDA和cuDNN。
我这次采用的是使用Docker软件包去安装。基于Docker的nvidia-docker插件可以自动化的配置相关环境,十分方便。
Docker 简介
Docker是一个开放源代码软件项目,让应用程序布署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd – nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。“
简单来说,Docker就是一个冰柜,里面存放着各种应用程序。所有的程序都在Docker里面运行。
在Docker里面安装完TensorFlow之后,一定要打开Docker,在Docker里面运行。要不然你会发现你找不到TensorFlow。大家可以学习一下Docker的使用方法。“容器”是大公司做开发必备的工具。
新安装的Ubuntu没有Docker,我在此省略删除旧版本Docker步骤。
在首次安装Docker CE之前,我们需要设置Docker源。
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
添加Docker的官方GPG密钥:
注意
如果没有安装curl,请按照提示安装:
sudo apt-get update
sudo apt install curl
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
验证秘钥:
sudo apt-key fingerprint 0EBFCD88
添加“稳定”版本的源地址:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
更新apt包索引:
sudo apt-get update
安装最新版本的Docker CE:
sudo apt-get install docker-ce
Docker CE安装完毕。
下一步我们要安装nvidia-docker:
(只装CPU版本或者非Nvidia显卡的同学可以跳过这个步骤)
添加源地址:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
安装nvidia-docker 2:
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
如果此时出现以下错误:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 但是 5:18.09.1~3-0~ubuntu-bionic 正要被安装 或 docker-ee (= 5:18.09.0~3-0~ubuntu-bionic) 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
可以看出,这是由于Docker和nvidia-docker两者之间版本不兼容所导致。要注意的是,这两者并不是同时发布更新,所以我们要手动选择版本安装。
以下两个命令分别是列出这两个软件的版本:
apt-cache madison nvidia-docker2 nvidia-container-runtime
apt-cache madison docker-ce
一般是Docker版本会先于nvidia-docker的版本,使用以下命令来卸载Docker:
sudo apt-get purge docker-ce
使用以下命令来安装特定版本的Docker:
sudo apt-get install docker-ce=<VERSION>
#例如 $ sudo apt-get install docker-ce=18.09.1~3-0~ubuntu-bionic
安装完成后,测试显卡驱动及CUDA:
sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
Docker安装完成后,我们要配置组,让我们可以以非root用户身份管理Docker。
首先,创建docker组:
sudo groupadd docker
将我的用户添加到该docker组:
sudo usermod -aG docker $USER
然后注销重新登陆。
以下是Docker运行的命令格式(请修改后使用):
docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]
05 TensorFlow Stable GPU
检查 GPU 是否可用:
lspci | grep -i nvidia
验证 nvidia-docker 安装:
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
下载并运行支持 GPU 的 TensorFlow 映像:
docker run --runtime=nvidia -it --rm tensorflow/tensorflow:latest-gpu \
python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
06 TensorFlow Stable CPU
想装CPU版本的朋友请使用以下代码:
docker run -it --rm tensorflow/tensorflow \
python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
至此,基于Ubuntu的TensorFlow安装完毕。
07 依赖
我打算以斯坦福大学的课程
Tensorflow for Deep Learning Research
作为参考来学习。
以下是他们使用的一些依赖:
scipy==1.0.0 |
scikit-learn==0.19.1 |
matplotlib==2.1.1 |
xlrd==1.1.0 |
ipdb==0.10.3 |
Pillow==5.0.0 |
lxml==4.1.1 |
大家可以选择性的去下载。
08 教程
斯坦福大学——Tensorflow for Deep Learning Research
Ref | Wikipedia TensorFlow Docker GitHub Zhihu
趁着2021年农历新年这段休息时间,我把这篇我在2019年农历新年放假时间发的Tensorflow安装教程修改了格式又发了出来。我在当时刚刚接触TF,可能写出来的教程还有诸多错误。时过境迁,两年过去了,众所周知计算机是一门实效性很强的学科,所以这篇文章在现在看来可能错误百出,还望大家多多指正。