2019/9/25

jupyter notebook : ImportError: No module named 'matplotlib'

在 conda 環境中啟動 jupyter notebook。
有用 conda install matplotlib
在 conda terminal/shell 中啟動 python,import matplotlib 是 OK 的。
但是在 conda 啟動的 jupyter notebook 中 import 卻失敗。

從 jupyter notebook Error message 發現 python 版本不對。
用 which jupyter 看,是在 .local/bin/jupyter。

所以是用到系統的 jupyter,不是 conda env 的 jupyter。
因為 conda env 的python 版本跟系統不一樣,所以發生錯誤。
-- 其實主要原因應該是conda env沒有 install jupyter。

所以在 conda 環境中 install jupyter 後OK

conda

miniconda, anaconda 好像命令一樣。

conda 大概是用來解決python 版本和 package 環境的問題。
有點像 VENV。

創造一個新環境的 profile:
conda create -n mynewenv
然後看看目前的環境 profile 有哪些,還有目前是在那一個 profile 下工作.
conda info -e
切換(/啟動)環境
conda activate mynewenv
在這個環境下安裝的 package 只有在這格環境下看的的到。
install package..
 conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
離開這個環境
conda deactivate
然後,如果不需要,可以刪除這格環境,包含他所有安裝得package 和佔用的disk space
conda remove -n mynewenv --all


在 raspberry pi 3, armbian 64bit 下 download miniconda aar64 的 install script 安裝的話…會出現 illegal instruction。
在修好之前,要去miniforge 下載對應的版本。

2019/9/24

Dive to Deep Learning, -- install miniconda

follow instruction run
bash Miniconda3-latest-Linux-x86_64.sh
都回答 Yes後,他會download miniconda 到 local folder,...
Preparing transaction: done
Executing transaction: - WARNING conda.core.envs_manager:register_env(46): Unable to register environment. 
Path not writable or missing.
  environment location: /home/charles-chang/miniconda2
  registry file: /home/charles-chang/.conda/environments.txt
done
installation finished.
Do you wish the installer to initialize Miniconda2
by running conda init? [yes|no]
[no] >>> yes
no change     /home/charles/miniconda2/condabin/conda
no change     /home/charles/miniconda2/bin/conda
no change     /home/charles/miniconda2/bin/conda-env
no change     /home/charles/miniconda2/bin/activate
no change     /home/charles/miniconda2/bin/deactivate
no change     /home/charles/miniconda2/etc/profile.d/conda.sh
no change     /home/charles/miniconda2/etc/fish/conf.d/conda.fish
no change     /home/charles/miniconda2/shell/condabin/Conda.psm1
no change     /home/charles/miniconda2/shell/condabin/conda-hook.ps1
no change     /home/charles/miniconda2/lib/python2.7/site-packages/xontrib/conda.xsh
no change     /home/charles/miniconda2/etc/profile.d/conda.csh
modified      /home/charles/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

If you'd prefer that conda's base environment not be activated on startup, 
   set the auto_activate_base parameter to false: 

conda config --set auto_activate_base false

Thank you for installing Miniconda2!
然後修改 .bashrc:

# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/charles/miniconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/charles/miniconda2/etc/profile.d/conda.sh" ]; then
        . "/home/charles/miniconda2/etc/profile.d/conda.sh"
    else
        export PATH="/home/charles/miniconda2/bin:$PATH"
    fi
fi
unset __conda_setup

為了避免麻煩。把這個 section copy 出來.. setupminicondaenv.bash

d2l-zh 的 environment.yml:
name: gluon
dependencies:
- python=3.6
- pip:
  - mxnet-cu100==1.5.0
  - d2lzh==0.8.11
  - jupyter==1.0.0
  - matplotlib==2.2.2
  - pandas==0.23.4
!!python 3.6!!

在安裝dl2-zh需要的package 和環境之前,要修改一下,使用 GPU版本的MXNET。
依照說明,用 nvidia-smi 看一下自己的 cuda 版本 (10.0)
修改 dl2-zh/environment.yml,上面已經是改好的內容 (mxnet-cu100)
conda env create -f d2l-zh/environment.yml
之後,安裝需要的 package,然後..
#
# To activate this environment, use
#
#     $ conda activate gluon
#
# To deactivate an active environment, use
#
#     $ conda deactivate

依照說明,conda activate gluon 就可以完成 環境設定。

開啟 jupyter notebook..
因為不是在 local,所以要開啟 remote access/loging.,
ref: public server,先..
jupyter notebook --generate-config
這樣會在 ~/.jupyter 下create 一個 jupyter_notebook_config.py
修改這個檔:
c.NotebookApp.allow_password_change = True
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.password_required = False
之後就可以啟動:
~$ jupyter notebook
...
...
    To access the notebook, open this file in a browser:
        file:///home/charles/.local/share/jupyter/runtime/nbserver-8678-open.html
    Or copy and paste one of these URLs:
        http://ey-wpc:8888/?token=77091332eb31bb666dc61e4d6d149460fe4e62757c44d157
..
在另一台電腦上開啟 browser 位址: http://ey-wpc:8888 (ey-wpc 是那台機器的 ip address)。
會出現要你輸入 token 或是 password 的畫面,把上面的77091332eb31bb666dc61e4d6d149460fe4e62757c44d157 copy 貼上就可以。

如果要設定 password 的話(這樣就不用 copy 那一堆key...)
$ jupyter notebook password
Enter password:  ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json
就會產生 password hascode 檔。以後 jupyter 啟動就會用這個設定的 password (自己要記住)

jupyter 7 (之後?) 的版本,要...
jupyter server --generate-config
然後去修改 .jupyter/*config.py
先修改 ip='localhost' 到 ip='*'
這樣才能用 public ip access.
設定 password 要趕改成
jupyter server password
要設定 port 在啟動的時候加上 option:
jupyter notebook --port 8765
不要啟動 browser 也是一樣,加上 --no-browser

2019/9/19

Camera Interface : parallel, mipi and lvds

其實致這三個都是 多組 dataline 的,所以多算是 parallel 傳輸。
但是 camera interface 中的 parallel type,是跟 lcd panel 一樣,除 data0-7 之外,還有 vsync, hsync clk 等。
然後信號都不是 differential 的。

LVDS 則是把 sync, hsync 併入data line code 中,所以 data frame 中會有一些 start of fame 等 code.
LVDS 的信號都是 differential 的。

MIPI 信號跟 pin 腳跟 LVDS 一樣,但是電氣準位不一樣。
MIPI 傳輸得的內容,如了 影像資料外,還包函一些控制命令。

2019/9/17

以docker 作為package 設定安裝測試環境

就是test install, run 然後刪除這樣。
跟一般的機器一樣,但是如果是 網路服務,就要先把 port mapping 想好。
不然裝完才要加的話,還要 stop, commit 再重新 run (同時加上 -p)

基礎系統,以 ubuntu16.04 為例, docker run -it -p 8022:22 ubuntu:16.04 後..
  • apt-get update
  • apt-get install openssh-server && /etc/init.d/ssh start
  • adduser MyName
  • apt-get install sudo vim
  • vi /etc/group -- add MyName into root and sudo group
這樣就可以登入docker container 了..
ssh -p 8022 MyName@dockerhost

因為 docker 使用-v mount local folder 的話,folder 的 uid/gid 是不便的,
所以 add user 時,最好可以assign uid/gid。
addgroup --gid 1000 MyName
adduser --uid 1000 --gid 1000 myName

先把 docker run 在 daemon mode,需要操作時再用 docker exec 啟動 bash..
docker run -idt -v ~/dockerfolder:/dockerfolder -p 8022:22 nvidia/cuda:10.1-base
docker exec -it container-name bash

2019/9/16

一個無聊的問題 -- pip install imageio on python2.7

使用pip install imageio 時錯誤:
:~$ pip install imageio
Collecting imageio
  Downloading https://files.pythonhosted.org/packages/69/4a/0387d708394d5e25d95b1abe427c301614152d1bebea18d9b06fa7199704/imageio-2.5.0.tar.gz (3.3MB)
    100% |################################| 3.4MB 541kB/s 
Collecting numpy (from imageio)
  Downloading https://files.pythonhosted.org/packages/ac/36/325b27ef698684c38b1fe2e546e2e7ef9cecd7037bcdb35c87efec4356af/numpy-1.17.2.zip (6.5MB)
    100% |################################| 6.5MB 283kB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "", line 1, in 
      File "/tmp/pip-build-o0a1gw/numpy/setup.py", line 31, in 
        raise RuntimeError("Python version >= 3.5 required.")
    RuntimeError: Python version >= 3.5 required.
發現,imageio2.5 depends on numpy1.17.
numpy1.17 只support python3
所以在 python2.7 上 安裝失敗。

所以用 pip install numpy==1.16.0 強制版本安裝 OK
但是安裝imageio 時一樣,需要 numpy1.17。

發現...
跟 pip 的安裝有關。

follow 關網 的、方法,抓 get-pip.py 來run 的話,安裝的 pip。
當 pip install imageio 時,正確的安裝 numpy1.16。
所以 在 python2.7 下OK

但是用 apt-get install python-pip 安裝的 pip,在用 pip install imageio 時,就會出現上面的問題。

2019/9/11

Dart 的一些 link..

Dart 的語法部份,follow language tour 照著key 一次就可以。
還可以用 dartpad 在 browser 上編輯執行,不用安裝。
最後的 Asynchrony 好像是Dart 特殊的部份。
當然,還有一些'方便'的設計,像..
  • => expression 就是 { return expression; }
  • .. cascade,省掉暫時物件命名的麻煩 (一堆 tmpvar)
  • ?. 省掉 object 是不是 null 的檢查

gcc - extend asm

因為這次clag的change not 有提到,增加 asm-goto 的 support,所以可以用來 compile kernel。
就查一下 asm-goto。

發現 gcc document 已經寫得很好了。
關於 C code 中使用 asm 來寫assembly code,這種特殊的形式,終於有清楚的說明了。