MAC下安装TensorFlow

内容直接参考了官网: https://www.tensorflow.org/install/

方法1: 下载编译好的包直接安装

pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl

验证:

$ python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>

方法2: 通过Anaconda进行安装

1.先下载并安装Anaconda, 中国大陆可以从: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载, 速度很快. 注意选择对应版本, 安装包里的数字对应的就是python的版本号.

2.创建一个 conda 中名字为 tensorflow的运行环境:
$ conda create -n tensorflow pip python=2.7 # or python=3.3, etc.

3.激活conda的tensorflow环境:
$ source activate tensorflow
 (targetDirectory)$ # Your prompt should change
 (逆向操作:source deactivate)

4.使用下列命令在conda里的tensorflow环境中安装tensorflow:
(targetDirectory)$ pip install --ignore-installed --upgrade TF_PYTHON_URL
where TF_PYTHON_URL is the URL of the TensorFlow Python package.

例如, 下述命令将安装一个python 3, 只支持CPU运算的tensorflow版本:(targetDirectory)$ pip install --ignore-installed --upgrade \
https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.5.0-py3-none-any.whl

5.验证安装结果:
执行一个tensorflow小程序验证.

6.在conda tenforflow环境下额外安装pandas:
(targetDirectory)$ # pip install pandas

方法3: 下载源码到本地根据本地环境编译安装

环境准备:

Mac OS X 下环境搭建: 
1.从 app store 安装 xcode 
2.安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL \  https://raw.githubusercontent.com/Homebrew/install/master/install)" 
3. 安装Bazel (Google开源的软件构建工具) brew install bazel 验证: bazel version 更新版本: brew upgrade bazel 
4. 安装SWIG 
brew install swig 注意: 你需要安装PCRE, 而不是 PCRE2. 
5. 安装Numpy,six,wheel
sudo pip install numpy six wheel

tenforflow的GPU计算只支持NVIDIA的显卡, 故MAC的机器不用考虑该部分内容.
(MAC)编译过程:

2.1 克隆TensorFlow仓库到本地

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow 

2.2 进入源码目录
$ cd tensorflow 

2.3 生成环境配置
$ ./configure
  (中文网站没有说到这一步, 但如果不执行的话, 会报找不到numpy)

2.4 编译并安装:

$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

2.5 创建 pip 包
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

2.6 安装pip包
# .whl 文件的实际名字与你所使用的平台有关
$ pip install /tmp/tensorflow_pkg/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

安装遇到的问题:

1. 从源码编译安装, 执行:

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

命令成功完成, 在执行命令的这个shell窗口, 可以以python里import tensorflow, 但是在其它的shell窗口, import tensorflow提示:

$ python

Python 2.7.13 (default, Mar 19 2017, 21:40:17) 

[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ImportError: No module named tensorflow

观察发现, 能成功import tensorflow的窗口打印的python版本信息为:

$ python
Python 2.7.13 (default, Apr 1 2017, 13:31:12) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>

也就是说虽然看上去python版本都是2.7.13, 其实执行的环境并不一样.

pyenv打印出来的信息对比:

成功的shell窗口:

$ pyenv versions

  system

  2.7.10

* 2.7.13 (set by /Users/xxx/.pyenv/version)

失败的shell窗口: 

$ pyenv versions

* system (set by /Users/xxx/.python-version)

  2.7.10

  2.7.13

查看pyenv help, 发现通过pyenv local 来指定环境信息:

$ pyenv help local

Usage: pyenv local <version>

       pyenv local --unset

Sets the local application-specific Python version by writing the

version name to a file named `.python-version'.

When you run a Python command, pyenv will look for a `.python-version'

file in the current directory and each parent directory. If no such

file is found in the tree, pyenv will use the global Python version

specified with `pyenv global'. A version specified with the

`PYENV_VERSION' environment variable takes precedence over local

and global versions.

<version> should be a string matching a Python version known to pyenv.

The special version string `system' will use your default system Python.

Run `pyenv versions' for a list of available Python versions.

根据帮助内容, 简单粗暴地执行了如下命令:

$ export PYENV_VERSION=2.7.13

强制设置一个环境变量, 让python执行时使用: 

2.7.13 (set by /Users/xxx/.pyenv/version)

接下来再执行import tensorflow就正常了

$ pyenv versions

  system

  2.7.10

* 2.7.13 (set by PYENV_VERSION environment variable)

$ python

Python 2.7.13 (default, Apr  1 2017, 13:31:12) 

[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf

>>> 

 

EC2服务器Apache下 /var/www/目录权限的配置

EC2上, Apache 文档根目录默认的路径为: /var/www/html, 因为这个目录有可能被不同用户访问, 如果不修改默认权限配置的话,后续无法使用不同用户对这个路径下的内容进行更新.

思路: 把要操作这个路径的所有用户都加到同一个组: apache.

配置步骤:

当前用户: ec2-user

原来安装apache的时候, 已自动生成apache 组.不再另外添加新的组.

1.将ec2-user加入apache组, 参数a表示append:

sudo usermod -a -G apache ec2-user

执行后可通过 groups这个命令来查看当前用户都在哪些组中.

2.将 /var/www 及其内容的组所有权更改到 apache 组:

sudo chown -R ec2-user:apache /var/www

若单独更改组, 可执行下面这条命令:
sudo chgrp -R apache /var/www

3.递归添加组写入权限:

sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

4.重启Apache Web服务器, 让新的组和权限生效:

sudo service httpd restart

现在,ec2-user 用户 (以及 apache 组的任何未来成员) 可以在 Apache 文档根目录中添加、删除和编辑文件。

5.后续有新的用户ftpuser要更新/var/www/下的内容, 可将它加入组apache中:

sudo usermod -a -G apache ftpuser

Amazon EC2 RDS迁移到新的区域

之前创建EC2实例的时候,没有注意到区域的问题,后面才发现所创建的实例被设置在了美国东部的Ohio,从大陆访问的话,加载速度太慢,于是研究了一下如何切换区域。

这里先要明确AWS里两个概念: available region和 available area.

1. Region是指一个大的区域,比方说:california, tokyo, Ireland这些地方就是AWS有提供服务的一个区域。

2.Area是同一个区域划分出来的多个区,一般AWS在每个Region都会搭建若干个Area。

本文所指的迁移,是从一个区域到另外一个区域的迁移。

下面开始步入正题:

1.首先,因为这次是要优先保证从中国大陆访问EC2的速度,所以可以先通过工具测试下杭州到每个有提供AWS服务的城市的网络延时,具体可访问这个网址来得到测试数据:

http://www.cloudping.info/

可以多测试几次,综合判断出最适合自己访问速度最满意的地方。

下面我们将以从Ohio迁移到California为例进行说明。

2.迁移EC2,主要操作步骤如下:

控制台右上角的Region先选择Ohio

2.1 对Ohio当前EC2创建AMI镜像:

Instances->选择虚拟机 -> Actions: Image -> Create Image
Update the permission if you need:
Images->AMIs-> select AMI -> Actions-> Modify Image Permissions

2.2 把新创建好的镜像从 ohio 拷贝到 california:

Images->AMIs-> select AMI -> Actions->Copy AMI->Choose Destination region

2.3 把控制台右上角的区域切换至california:

launch new EC2 instance -> select custom AMI -> Your AMI from Ohio

后面的步骤按个人需要进行配置就行。

需要特别说明的是, 迁移后,California这边的安全组需要另外再配置一遍。同时,要重新配置SSH访问的证书。

如下旧的EC2实例不需要再使用,记得把它关掉,以免被计费。

 

3. 迁移RDS,主要操作步骤如下:

控制台右上角的Region先选择Ohio

3.1 先对Ohio这边的RDS创建快照:

Instance -> select DB instance -> Instance actions -> Take snapshot

3.2 把创建好的快照拷贝到California:

Snapshots -> select Snapshot -> Snapshot Actions -> Copy Snapshot -> Copy to California

3.3 把控制台右上角的区域切换至california:

Snapshots -> select Snapshot -> Snapshot Actions -> Restore Snapshot

3.4 配置下安全组。

3.5 更新下EC2实例中数据库访问的地址信息。

简要步骤就是上面这些。