[GCP] Run tensorflow with GPU on Google Cloud Platform

To create a VM instance, you have to register on the Google cloud platform, and once you registered, you will get a 300$ free trial. I won’t include the registration part here as it is very easy.

1 External IP addresses
Navigate to “VPC Network – External IP addresses” and apply for a new static IP and name it as you want
The result will look like this, in this case, i named it to taiwan as i choose from asia areas:

2 Firewall rules
Navigate to “VPC Network – Firewall rule” and add a firewall rule like this:

3 Apply an API to use GPUs
You have to choose a right area as some areas do not provide GPU usage and the price could be various. In this case, we choose “asia-east1-a” and decide to use its Tesla P100
Navigate to “IAM & admin – Quotas” and select the API you want to apply, you will receive an email from Google, then the follow the instructions to use the GPU you want (usually, just click the link provided in the email).

4 Create an instance
Navigate to “Compute Engine – VM instances” and create an vm instance.
In order to the use GPU we applied, you have to choose the same area.
Hit the “Customize” button and customize your machine type, then expand the GPU section to use a P100.
For the operating system, just choose Ubuntu 16, you can also use an SSD or expand the boot disk size to 20 GB if you like.
For the Firewall section, just tick both the HTTP and HTTPS traffic.
You may also have to expand the next section and configure your network interface to use static IP (optional).
Do not be afraid of the price as Google will only charge you from the 300$ when you are running the device and it is charged by minutes.

5 CUDA® Toolkit 8.0.
Once you have created the instance, click SSH button to open an SSH console and follow the following commands.

sudo apt-get update
sudo curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda-8-0 -y

6 Jupyter Notebook

sudo apt-get install ipython python3-pip
sudo pip3 install --upgrade pip
sudo pip3 install jupyter
# Start your jupyter notebook
sudo jupyter notebook --ip --port 8888 --allow-root

Copy the link provided by jupyter and replace the IP “” to your VM instance’s and copy it your browser, and you can now get access to your Jupyter Notebook.

7 cuDNN v6 for CUDA 8.0
We have to use the Jupyter Notebook to upload our installation package first. To do this, you can click this link and download one. Remeber, you have to create a NVIDIA account if do not have one. Then, agree terms and choose the following one to download, which is the “cuDNN v6.0 Library for Linux”.

# The file name could be different, be careful.
tar -xzvf cudnn-8.0-linux-x64-v6.0.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
# Edit .bashrc
nano ~/.bashrc
# Add the following two lines to the file
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
# Press Ctrl+O to save changes and Ctrl+X to exit the editor
# Update changes
source ~/.bashrc

8 Tensorflow

sudo pip3 install tensorflow-gpu

Now you can have fun with your VM instance.
To save your 300$, do not to forget to shutdown your VM instance after using it.

[RPi] 为树莓派添加DIY智能散热风扇


三极管在很多旧设备里面可以找到,这里以 1AM 示例(从USB支付钥匙拆的)。然后以以下示意图接上三极管。

GitHub: https://github.com/xswxm/Smart_Fan_for_Raspberry_Pi.git


sudo apt-get update
sudo apt-get install python python-dev python-pip
# 安装模块
sudo pip install rpi.gpio
sudo apt-get install pigpio python-pigpio
# 查看帮助文档
python fan.py -h
# 以默认配置运行
python fan.py
# 后台运行
nohup python fan.py &
# 设置pin为24,每2秒检测一下CPU温度,若超过50度则开启风扇
python fan.py -t 50 -i 2 -p 24
# 启用 pigpio 服务
sudo pigpiod
# 查看帮助文档
python fan_pwm.py -h
# 以默认配置运行
python fan_pwm.py
# 后台运行
nohup python fan_pwm.py &
# 设置pin为24,每2秒检测一下CPU温度,若超过50度则开启风扇,同时设置温度每增加1摄氏度,风扇速度增加10%
python fan_pwm.py -t 50 -i 2 -p 24 -s 10

[RPi] 树莓派添加samba文件共享服务

1. 安装Samba

sudo apt-get install samba samba-common-bin

2. 为samba添加用户,可以使用现有账户,也可以创建专属账户


# 添加账户,username即你想要添加的账户名
sudo useradd username
# 建立共享文件夹即修改用户组
sudo mkdir -p /home/username
sudo chown -R username:username /home/username/


# 添加账户,username是你想要添加到samba的账户,该步骤会要求设置密码,需要注意的是如果你samba下的用户名的密码区别于树莓派系统下的用户名的密码
sudo smbpasswd -a username

3. 修改配置文件

# 对原配置文件做一备份
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# 创建一个新的配置文件
sudo nano /etc/samba/smb.conf

配置文件可以照如下修改,然后按 Ctrl+o 保存,Ctrl+x退出

    comment= My Samba
    path = /home/username
    valid users = username
    browseable = yes
    writable = yes

pi: 显示的名称
comment: 显示名称下的注释
path: 共享的路径
vaild users: 具有操作权限的用户名
browseable: 是否可以浏览
writable: 是否可以写入

4. 重启samba服务

sudo service smbd restart

5. 使用samba服务

Windows用户: 打开计算机,在地址栏输入 ‘\\youripaddress\’(不含引号,youripaddress是你的树莓派IP地址)即可找到共享的文件夹
Linux用户: 打开文件浏览器,在地址栏 ‘smb://youripaddress/’(不含引号,youripaddress是你的树莓派IP地址)即可

[12864/SSD1306] Play Snake on Raspberry Pi

System Monitor for Raspberry Pi with 12864/SSD1306, and you can download all the files from GitHub.


Setting Up
Configure your 128464 by following this tutorial: https://learn.adafruit.com/ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black/usage?view=all

# Ports used for the Display. You may have to change them to yours
RST = 25
DC = 24
# Configurations of this game
# You may check the preference below and alter the values if you want
display_interval = 0.05                # Refresh display every 0.05 second => FPS = 20
size = 2                               # Size of a snake, 2 means one point occupies four pixels (2x2)
# Initialize the boundary of the gaming area
area = (0, 0, disp.width*2/3/size-1, (disp.height-2)/size-1)    # Gameing area in points with size
boundary = (0, 0, (area[2]+1)*size+1, (area[3]+1)*size+1)       # Gameing boundary
boundary_cross = True                  # snake is able to cross the boundary 
# Block setting
block_mode = False                     # Do not create blocks
# Initialize a snake
snake = []                             # snake
snake0 = (area[2]/2, area[3]/2)        # snake's head (first pixel)
snake1 = snake0                        # snake's tail (last pixel)
l = 4                                  # snake's length = 4
interval_max = 1
interval_min = 0.05
interval = interval_max                # move the snake every 1 second
direction = (1, 0)                     # direction = Right
food = snake0                          # normal food
food_score = 1                         # each food worth 1 score
sfood = ()                             # initialize a empty special food
sfood_lifetime = 10                    # special food exists for 10 seconds
sfood_count = 0                        # to count the time of the special food
sfood_interval = 0.25                  # refresh the special food every 0.25 second
sfood_time = 30                        # Possible to generate a special food every 30 seconds
sfood_score = 5                        # each special food worth 5 scores
blocks = []                            # blocks for blocking the snake
scores = [0, 10, 50, 100, 150, 250, 350, 550, 750, 950, 1200]
levels = [0, 1,  2,  3,   4,   5,   6,   7,   8,   9,   10]
score = 0
level = 0

How to Use

# Run directly with diffculity = 0
sudo python snake.py
# Run directly with diffculity = 1
sudo python snake.py 1
# Run directly with diffculity = 2
sudo python snake.py 2

How to Play
Control: Press ‘w’, ‘a’, ‘s’, ‘d’
Speed up/remove effect: Press ‘q’
Exit game: Press ‘x’