FC2ブログ

[Wasabi]初期設定

Wasabiがやたら安いので使ってみました。
しかも、アップロード/ダウンロード無料だと!?
以下参考にさせて頂きました。

https://gb-j.com/service/wasabi/


初期設定

https://wasabi.com/
へアクセス

TRY or BUY NOW へ
記入して、START YOUR FREE TRIAL へ
(うる覚えだが)Wasabiから招待メールが届くので、本文のCreate Account へ
メールとパスワードを登録してサインアップする
(次のステップは確か)サインインしてCREATE BUCKETする
バケット名をてきとー(ただし他のユーザと重複禁止だったはず)につけて、日本から一番近いus-west-1を選択。


Cyberduckからのアクセス設定

wasabiコンソール画面左上の「メニュー」 > Access Keys > CREATE NEW ACCESS KEY
「Access Key」と「Secret Key」をメモするか、CSVをダウンロードする
Cyberduckをインストールしたら起動 > ファイル > 新規接続 > 以下の通り設定 > 接続

ドロップダウンメニュー: Amazon S3
ポート: 443
サーバ: s3.us-west-1.wasabisys.com
アクセスキーID: Wasabi管理画面からメモしたもの
シークレットアクセスキー: Wasabi管理画面からメモしたもの
Path: /xxxbook


これでCyberduckからの接続に成功した。

尚、サーバ名は各リージョンで以下だって。US-WESTしか使わないと思うけど、一応メモ。

us-east-1: s3.wasabisys.com
us-west-1: s3.us-west-1.wasabisys.com
eu-central-1: s3.eu-central-1.wasabisys.com



Cyberduckからファイルアップロード

エクスプローラからドラッグ&ドロップでアップロード可能。
もしくはメニュー > アクション > アップロード > ファイル選択 > 複数ファイル選択して「選択ボタン」でアップロード可能。
エクスプローラ間隔でコピー&ペーストはできなかった。

アップロード速度は、日曜AM8:30頃で、9~14MB/s程度。
スポンサーサイト



[PC]PRIMERGY TX1310 OS起動しない原因

Fujitsu PRIMERGY TX1310 M3 Celeron G3930
https://jp.fujitsu.com/platform/server/primergy/products/lineup/tx1310m3/

OS・ディスクレスだが他は全てそろっていて、送料込みで17000円くらい。安い!
噂には聞いていたが、ケースもねじ不要でオープンできてイイ!
HDDもスライド式で4本搭載できるのでRAIDも組めてイイ!

それにしてもCeleron遅いなー。Ubuntu18.04インストールする時にえらい待たされた。
あと注意点はグラフィックポートがDPである事。たまたまDP to HDMI変換ケーブルがあったので良かったものの。

それで本題だが、Ubuntuインストール後にOSが起動せず何回やってもBIOS画面にいってしまうので悩んでいたら、
原因はSATA ConfigがRAIDモードになってた。
RAIDモードだとBIOS画面でHDD認識すらされないので、AHCIモードにして再起動したらしっかりUbuntu起動した。

HDD x 4本だし、PCIe空スロットもあるし、そこそこ遊べるような気が。

[CentOS]ZFSディスクがブートの邪魔する

症状

ホスト: g33
OS: CentOS 7.7.1908
OS用: HDD(A) ・・・ 1本
ZFS用: HDD(B),(C),(D),(E) ・・・ 4本


作業手順と困った事

1.OS用HDDだけで起動。
2.起動後にZFS用HDD 4本を接続。
3.ZFS用HDD 4本でZFSプールの作成、ボリュームの切り出し・マウント

zpool create -f tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
zfs create tank/share -o mountpoint=/home/share


4.再起動
 ・・・ すると、CentOSが起動しない。
ZFS用HDDだけ外してOS用HDDだけで起動するとCentOS起動する。


考察

ZFS用HDDを接続したらCentOSが起動しないので、何かしらの設定をしてしまいZFSプール用のHDD 4本がブータブル設定になっていると予想。
ブート優先順位はHDD同士なので同じだが、HDDの中でZFS用が先にチェックされて、それがブータブル設定だったのでそこから起動しようとしたが、OSデータは何もないため、起動出来なかった、と予想。


確認

川合さん著作の「OS自作入門」という素晴らしい本を読んでいたおかげで、ブータブルの設定かどうかは、
HDD先頭セクタ(512バイト)が0x1fe=55、0x1ff=aa、になっているかどうかで決まる、っと知ってた。
(著書のpage27に書いてます。)

早速確認してみます。
CentOSへログインして、シェルプロンプト上で
# df
/dev/sdaがOS用とわかる。

# dd if=/dev/sda bs=512 count=1 | hexdump -C
これで先頭セクタ(block size=512の1カウント分)を16進数表示で標準出力に出してくれる。
hexdump -Cをつけないとバイナリのままだから何がなにやらわからないので注意。
最後の方を見てみると、000001f0の行の右端が55aaになっている事が確認できた。
CentOSをインストールしたブータブルHDDだから当然だけど。

# dd if=/dev/sdb bs=512 count=1 | hexdump -C
次にZFSプールを構築したHDD 4本のうち1本を見てみる。
すると同様に0x1fe=55、0x1ff=aaとなっており、ブータブル設定になっている事が確認できた。
他の3本も同じくブータブル設定になってた。


実験

ZFSプール構築後、先頭セクタのブータブル設定だけ解除してみる。少し強引なやり方ですが。
まずは先頭セクタを4台共にファイルへ保存。

for x in b c d e
do
dd if=/dev/sdb bs=512 count=1 > dd.sd$x.1st_sec
done



次にバイナリエディタで編集。今回はvimのバイナリモードを使う。
vimでないと後述のxxdコマンドが使えないので、viは不可。
# vim -b dd.sdb.1st_sec

ファイルを開いてもバイナリのままだと読めないので以下コマンドでHEX表示にかえる。
:%!xxd
これで読めるようになったので最後を55aaから55abに変更する。
そうしたら、バイナリに戻してやる。ここで戻さないとバイナリでなくHEX値にしたテキストで保存されてしまう。
:%!xxd -r
あとは保存して終了。
:wq


試しに再度同じ手順で開いてみたら、ちゃんと55abで保存されてた。

後は以下コマンドで編集した先頭セクタのバイナリファイルをHDD先頭セクタへ上書きしてやる。
# dd if=dd.sdb.1st_sec of=/dev/sdb bs=512 count=1
念のため以下で確認してみると、ちゃんとHDD sdbの先頭セクタが55abに変わってた。
# dd if=/dev/sdb bs=512 count=1 | hexdump -C

同じ手順でsdbからsdeまで行う。


これをやったら確かにZFS用HDDを接続したままでも、CentOS用HDDからOS起動するようになった。


残る課題

・modprobe zfsを毎回やらないとモジュールがロードされない > これ自動化するのどうやるんだっけ?
・なので、もちろんZFSプールとかもなくなってる。 > これも自動化どうやる?



情報見つけた。これで解決かな?

https://web.chaperone.jp/w/index.php?CentOS/zfs

再起動すると外れる。。。
それを回避するには

[root@zfs ~]# systemctl enable zfs-import-cache
[root@zfs ~]# systemctl enable zfs-mount
[root@zfs ~]# systemctl enable zfs-import.target

を有効にしておく
*zfsのマウントポイントが存在した場合、この方式で再起動後でもzfsカーネルモジュールが外れなく、zfsマウントが反映されるって感じかな



http://lazy-dog.hatenablog.com/entry/2014/08/17/033038

zpool create -m /tank/zfs_pool/zfspool01/ zfs-pool1 raidz1 sdb sdc sdd

となる。コマンドを実行して、標準出力・エラー出力に何も表示されなければ、使用可能になる。なお、サーバを再起動しても、何も設定しなくとも自動でマウントされる。

[PC]MZK-SA300N2初期設定

アクセスポイントとしてMZK-300N2を使う。

この型番でマニュアル探すとなくて、別名がMZK-SA300N2となってる。
こっちのマニュアルはある。
https://www.planex.co.jp/support/download/wireless/mzk-sa300n2.shtml


初期化方法

以前設定したままなので、既にパスワードとかわからない。
まずは初期化することにした。

・本体を電源ON
・ボールペンでリセットボタンを10秒以上押すと、POWER LEDが点滅する。離してLED安定したら初期化完了。
・本体をインターネットに接続されているルータにLANケーブルで接続。
 本体横のセキュリティモードのスライドスイッチはOFF設定。
・この商品はインターネット接続されているネットワークセグメントに接続すると、自動的にそのセグメントに合わせるらしい。
 192.168.100.0/24だったら、192.168.100.250に自動的にIPが設定されるみたい。
 250でアクセス出来なければ、1か249のいずれかで出来るらしい。
・IPが設定されたら、ブラウザでそのIPへアクセスして管理画面を表示させる。
・初期ユーザ名、パスワードはadmin、passwordでログイン。
・これで管理画面で固定IPを割り振れば、その後はその固定IPで管理画面にアクセス可能。


これで設定出来たが、電波が弱いせいか、もしくは無線ルータが別にもあって干渉しているせいか、
部屋が2つ離れていると電波を拾えなかった。

[PC]L2マネージドスイッチが安い!

TP-LINK T2500G-10TS (TL-SG3210)
https://www.tp-link.com/jp/business-networking/managed-switch/t2500g-10ts/#specifications

いろいろ機能が入ってるL2スイッチを探していたら、Amazon USで買うと安い。
送料含めて114USD以下。
フツーに輸入出来たし、Amazon JPで買うより何十%も安い。

TP-LINK Jetstream 8-Port Gigabit L2 Managed Switch with 2 SFP Slots T2500G-10TS
https://www.amazon.com/TP-LINK-Jetstream-Gigabit-Managed-T2500G-10TS/dp/B01N815NEO/ref=sr_1_1?keywords=T2500G-10TS&qid=1572581848&sr=8-1


初期設定

スイッチ電源ON
スイッチのLANポートにケーブル接続する。
T2500G-10TSの初期IPは192.168.0.1なので、PCアダプタを192.168.0.0/24のセグメントに設定。
ブラウザから192.168.0.1へアクセス
username、passwordは両方adminでログイン
System > System Time > 好きな方法で時刻を設定
System > System IP > 好きなIP設定へ
User Management > User Config > User Tableのadminにチェック > Editをクリック > パスワードを変更する

[PC]LIVA Z2(N4000)購入

CPU、メモリもついてWindows 10プレインストールでこのコンパクトさでSATA 2.5"も1台追加できる。
あまりの安さにぽちっとしてしまった。増税前だったので2万円以下。

Elite ECS LIVA Z2 LIVAZ2-4/32-W10(N4000)
https://www.amazon.co.jp/Elite-%E5%B0%8F%E5%9E%8B%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97PC-LIVAZ2-4-32-W10-N4000/dp/B07KJ3Q5Z9

PCIeスロットがあるShuttleもいいが、評価用に持ち運ぶならこのコンパクトさはイイ!

[AI]Jetson Nano

きっかけから購入まで

https://shop.cqpub.co.jp/detail/2359/
トランジスタ技術 2019年9月号のJetson Nano特集が面白そうだったので、購入してみた。

99ドルといいつつ、国内で買うにはもろもろ入って秋月電子が安い方かと思いぽちっと。
http://akizukidenshi.com/catalog/g/gM-14393/

電源アダプタも出力5V4Aの手持ちがなかったし、動作確認済との事なので一緒に購入した。
http://akizukidenshi.com/catalog/g/gM-10660/

microSDは手持ちを使う。


初期セットアップから起動まで

こちらを参考させて頂く。
https://qiita.com/tsutof/items/66e68c75b462c4faf1cb

OSイメージを入手するため、以下へアクセス。
https://developer.nvidia.com/embedded/downloads
Jetson Download Center

 > For only the Jetson Nano Developer Kit の中の SD card Imageリンクをクリックするとイメージのダウンロードが始まる。
これはページ下の方の以下Imageリンクから得られるファイルと同じだった。

Showing 371 downloads.
Title                  Version  Release Date
Jetson Nano Developer Kit SD Card Image  JP 4.2.2  2019/08/26
DOWNLOADS
Image


 > 同ページの以下リンクへ進む。
 > Getting Started With Jetson Nano Developer Kit
 > Next Step、でWrite Image to the microSD Card まで進む
 > Instructions for Windows
 > SD Memory Card Formatter for Windows のリンクからSDカードフォーマットツールをダウンロード。
   (進んだページでAcceptを押すと、ダウンロードが始まる。)
 > SD Card Formatter 5.0.1 Setup.exe を実行してインストールする。
 > OSイメージを書き込むSDカードをPCに接続する。
 > SD Card Fomatterを起動して、対象のSDドライブ名を指定、クイックフォーマットでSDカードをフォーマットする。
 > 次に、SDカードへのOSイメージ書き込みツール Etcherをダウンロードする。
   これは「Write Image to the microSD Card」のEtcherのリンクから飛び、その先の「Download for Windows (x86|x64)」から入手できる。
 > balenaEtcher-Setup-1.5.56.exe を実行してインストール。インストール進めたらいつの間にか起動してた。
 > EtcherウィンドウのSelect imageでOSイメージを選択。
   この時、ダウンロードしたOSイメージjetson-nano-sd-r32.2.1.zipを解凍するとエラー。
   そのままzipをEtcherで指定したら、sd-blob-b01.imgとして認識された。

 > Select Targetで先ほどフォーマットしたSDカードのドライブ名を選択し、Continue。
 > 最後にFlashをクリック。
 > 20分くらいで完了したが、その時ドライブ名Pくらいまでのたくさんのドライブが認識され、
   フォーマットしますか?ウィンドウが出てびっくり。こういう仕様なのか・・・?
 > とにかくSDカードをPCから外し、Jetson Nanoスロットへ挿入。
 > その他、USBキーボードやら、USBマウスやら、HDMIケーブルを接続。
 > あとは突然発見したmicro-USB接続のACアダプタをJetsonに接続して電源ON。

最初にNVIDIAのロゴが表示された後は、ずっと真っ暗。時間かかるのかな?

10分以上待っても真っ暗なので、再度OSイメージ入手からやってみる。
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#prepare
今度は上記ページの「Jetson Nano Developer Kit SD Card Image」のリンクからゲット。

(注)後で調べて分かったがzipにはファイル容量4GBの制限があるとか。
  4GB以上のファイルはzip64対応の解凍ツールでやるべきとか。
  Lhaplusではエラーになったので、7-zipを使ったら、解凍できた。


今度はSDカードライターツール(Etcher)でzipではなく、解凍後のimgを指定してやり直してみる。
その前に、まずはいっぱい作られたパーティションが邪魔で、かつWidowsの管理ツール > ディスクの管理が
起動しないという状態になっているので、CentOSで認識させ、fdiskでパーティションを削除した。
/dev/sdb1、sdb2、sdb3とたくさんデバイスが見えるのに、fdiskで見るとパーティションは1つだけ。不思議。
とにかくこのパーティションを削除したら、確かに全てパーティション消えた。
これをWindowsへ接続して、フォーマッターとライターで再作業
・・・
しかし、やっぱり同じだった。ライターで書き込みした後は10個くらいのパーティションが生成され、そしてそれをJetsonに挿入しても
最初のNVIDIAのロゴ、そしてその後すぐのNVIDIAロゴの後はずっと真っ暗画面。

もしかしてSDカードの速度が悪い?



初期セットアップから起動まで(SDカードと電源変更で起動成功)

この2つを変更したら、無事起動出来ました。

SDカード変更: SANDISK Ultra microSDHC I 32GB ⑩ > SANDISK Ultra microSDXC I 128GB ⑩A1 UHS Speed Class1
電源: ラズパイ用AC to microUSB 5V/3A(AD-K50P300) > 秋月で購入したACアダプタ5V/4A(型番別途)
  ※ 尚、microUSB電源の場合はそのまま動くが、ACアダプタジャックを使う場合は、J48にジャンパをする必要がある。

起動成功したSDカードで、ACアダプタをラズパイ用にしたら、やはりUbuntu起動せず。
そうなると、「ラズパイ用AC to microUSB 5V/3A(AD-K50P300)」という結論か・・・3Aだからいけると思ったのだが。

(9/7追記)
起動できた環境でACアダプタだけ変えて再確認してみたら、無事起動できた。
そうなると、動く動かないで異なる点は以下。とりあえずはデバッグ後回し。
 1.電源タップとモニタ
 2.SDカード。

起動後、システムコンフィグ

OSが無事起動すると最初だけSystem Configurationウィンドウが起動する。
NVIDIA End User License Agreements > I accept・・・にチェック > Continue
 > WelcomeでEnglishを選択し、Continue
 > Keyboard layout > JapaneseのJapanese、を選択し、Continue
 > Where are you? > Tokyo、を選択し、Continue
 > 以下いれてContinue

Your name: hoge
Your computer's name: jetson
choose a password: xxxx

 > なんだかんだ動いて、再起動もされて、Ubuntu OSが起動された。
ログインすると、NVIDIAロゴとかっこいい壁紙が出る。



UnixBenchやってみる

https://monoist.atmarkit.co.jp/mn/articles/1907/01/news037_2.html

起動後、既にDHCPでIP取得されてたので、特に設定は不要。
# apt-get update > 正常終了
# apt-get install build-essential > なんだかエラー
# apt-get install git > なんだかエラー
# cd /root
# mkdir unixbench
# cd unixbench
# git clone https://github.com/kdlucas/byte-unixbench.git .
# cd Unixbench
# ./Run
なんだかんだテストが動いて、以下のように終了した。

Benchmark Run: 土 9月 07 2019 09:15:33 - 09:43:37
4 CPUs in system; running 4 parallel copies of tests

Drystone 2 using register variables 5245195.3 lps (10.0 s, 7 samples)
Double-Precision Whatstone    5733.4 MWIPS (9.9 s, 7 samples)
 :
System Call Overhead     15000.0 1327351.5  884.9
System Benchmarks Index Score   1062.6




CUDAコアで“Hello AI World”を動作

https://monoist.atmarkit.co.jp/mn/articles/1908/07/news013.html

# apt-get install cmake
E: Package 'cmake' has no installation candidate

何やら見つからない。

https://askubuntu.com/questions/356014/package-cmake-has-no-installation-candidate-ubuntu-12-04

ここを参考にして、以下の通りやったらcmakeがインストールできた。
# apt-get update -y
# apt-get update
# apt-get install cmake -y

cmakeが入ったら、次は以下。
# git clone https://github.com/dusty-nv/jetson-inference
# cd jetson-inference
# git submodule update --init

# apt-get install libpython3-dev python3-numpy

# cd /root/jetson/xxx/jetson-inference/
# mkdir build
# cd build
# cmake ../
 > Model Downloaderウィンドウ > 好きなモデルを選択 > OK
 > これでAlexNetなどから順番にダウンロードが始まる

途中です。




Tensorflowインストール

https://qiita.com/tsutof/items/77b49f71ed81344b9d16

# apt-get install libhdf5-serial-dev hdf5-tools
# apt-get install python3-pip
# apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev
# apt autoremove
# pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker grpcio six mock requests gast h5py astor termcolor

Exception:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
 :

# pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu

途中



ラズパイカメラモジュールV2を接続

https://qiita.com/tsutof/items/2d2248ec098c1b8d3e32
こことか参考にさせて頂きました。

Jetson Nanoに対応してるV2モジュールを接続。
フレキの青い方が外側になるように接続して、Jetson Nano起動したら、/dev/video0として認識されてるみたい。

リアルタイム画像表示

# nvgstcapture
とやるだけで、中くらいのウィンドウが起動し、カメラでとってる映像が表示された。

※ 他のブログ見ると、2A USB電源とか使ってたら、nvgstcaptureでフリーズするとか。
   秋月でJetson Nano対応とうたってる4A ACアダプタは特に問題なし。

Ctrl-Cで終了できた。

リアルタイム画像表示(Gstreamerコマンド)

これやると全画面でリアルタイム映像表示になった。
# gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=1920, height=1080, format=(string)NV12, framerate=(fraction)30/1' ! nvoverlaysink -e
Ctrl-Cで終了できた。

リアルタイム画像表示(OpenCV)

numpyモジュールのアップグレード。
# apt-get update
# apt install python3-pip
# pip3 install --upgrade numpy
ここで5~10分待った。

以下をnano_cam_test.pyとして保存。

import cv2

GST_STR = 'nvarguscamerasrc \
! video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)30/1 \
! nvvidconv ! video/x-raw, width=(int)1920, height=(int)1080, format=(string)BGRx \
! videoconvert \
! appsink'
WINDOW_NAME = 'Camera Test'

def main():
cap = cv2.VideoCapture(GST_STR, cv2.CAP_GSTREAMER)

while True:
ret, img = cap.read()
if ret != True:
break

cv2.imshow(WINDOW_NAME, img)

key = cv2.waitKey(10)
if key == 27: # ESC
break

if __name__ == "__main__":
main()


# python3 nano_cam_test.py
こうするとウィンドウが右端に出た。
Ctrl-Cで終了出来た。


リアルタイム画像類推

https://denor.jp/jetson-nano%E3%81%AB%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%92%E6%8E%A5%E7%B6%9A%E3%81%97%E3%81%A6%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E7%94%BB%E5%83%8F%E9%A1%9E%E6%8E%A8%E3%82%92%E8%A1%8C

Jetson Nanoシステムのアップデート・アップグレードを行う。
# apt update
# apt upgrade
これもだいぶ時間かかった。

必要なものインストール
# apt install git cmake doxygen

以下は過去に既にやってるので飛ばすが必要な作業として一応メモ。
# cd /root
# git clone https://github.com/dusty-nv/jetson-inference
# cd jetson-inference
# git submodule update --init
# cd jetson-inference
# git submodule update --init
# mkdir build
# cd build
# cmake ../
# make

ビルドが完了したら、リアルタイム推論をやってみる。
# cd aarch64/bin
# ./imagenet-camera googlenet
カメラに映る映像を変えてみると、変わる。
モニターを映すとmonitorと表示され、顔を映すとoxygen maskになった。なぜoxygen mask?

# ./imagenet-camera alexnet
こちらも試してみても同様。
しかし、突然フリーズ。Ctrl-Cでも効かない。
別のterminalを起動してshutdownしてから再起動したら、戻った。




リモートデスクトップ(トラ技)

# apt-get install xrdp
# apt-get install xtightvncviewer
# apt-get install x11vnc
# cd /root/.config
# mkdir autostart
# cd autostart
# touch x11vnc.desktop
# vi x11vnc.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc -forever -usepw -display :0
StartupNotify=false
Terminal=false
Hidden=false


# apt-get install xfce4
# echo xfce4-session > ~/.xsession
# vi /etc/xrdp/startwm.sh

#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
startxfce4


# reboot
Jetson NanoのIPを確認しておく。
# ifconfig

クライアントPCからリモートデスクトップ接続する。
Microsoft Store
https://www.microsoft.com/ja-jp/
 > Remote Desktopを検索
 > ストアで\0で購入してインストール。
 > 起動して、jetsonのIPとユーザ名とパスワードを入力してログイン。
jetson画面は出たが、表示が非常に重い。



GPUグラフ

# tegrastats
状況が表示される。
# git clone https://github.com/JetsonHacksNano/gpuGraph
# cd gpuGraph
# python3 gpuGraph.py

Traceback (most recent call last):
File "gpuGraph.py", line 7, in
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'


matplotlibが見つからないと言われたのでインストール。
# pip install matplotlib




CUDAセットアップ

https://researchmap.jp/joop5kxaf-2001408/

# apt-add-repository universe
# apt-get update

https://developer.nvidia.com/linux-tegra-rel-21

上記ページ > CUDA Toolkit > CUDA 6.5 Toolkit for L4T Rel 21.2
 > cuda-repo-l4t-r21.2-6-5-prod_6.5-34_armhf.deb

[Windows]Vagrant

まずはさくっと試してみる

1.必要アプリインストール

1.ホストPC準備: Windows 10 Home (x280)
2.Virtual Boxインストール: VirtualBox-6.0.10-132072-Win.exe
3.Vagrantインストール: vagrant_2.2.5_x86_64.msi
4.Gitインストール: Git-2.23.0-64-bit.exe ※ Git bashを使うため

2.Vagrantfile作成

以下内容を「Vagrantfile」というファイル名で作る。
実験なので、インストールしてる各パッケージに特に意味なし。


$install_package = <sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install build-essential
sudo apt-get -y install libncurses5-dev gawk u-boot-tools openssh-server samba binutils-arm-linux-gnueabi xinetd kpartx
SCRIPT

Vagrant.configure(2) do |config|
config.vm.box = 'ubuntu/xenial64'
config.vm.provision 'shell', inline: $install_package
end



3.仮想マシン起動

Git Bashを起動。
Vagrantfileファイルのある場所で以下実行。
# vagrant.exe up


4.クライアントから仮想マシンへアクセス

終了したら、以下で仮想マシンにsshアクセス。
# vagrant.exe ssh
これでプロンプトが変わり、仮想マシンへのログインが出来た。


5.仮想マシンからログアウト

# exit
これでホストマシンへ戻れる。


6.仮想マシン停止

# vagrant halt
Virtual Box起動してみると、確かに電源オフになった。


7.VagrantfileでAnsible連携

Ansibleで自動構成させるためのプレイブックファイルplaybook.ymlを以下内容で作る。

---
- hosts: all
tasks:
- name: install latest docker
shell: curl -sSL https://get.docker.com/ubuntu/ | sudo sh
- name: add vagrant user to docker group
command: gpasswd -a vagrant docker
sudo: yes



Vagrantfileに赤字部を追加して、Ansibleでplaybook.ymlの通り構成されるようにする。

Vagrant.configure(2) do |config|
config.vm.box = "utopic64"
config.vm.network "forwarded_port", guest: 80, host: 8080

config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
end
end

[VMware]メモ

NATアドレス範囲を調べる

ネットワーク接続を開く
Win + R > ncpa.cpl > VMnet8
仮想マシンのネットワークアダプタ設定をNATにすると、VMnet8が使われるとか。
 > ダブルクリック > 詳細 > ネットワーク接続の詳細
ここで確認すると、
IPv4 サブネットマスク 255.255.255.0
IPv4 DHCPサーバ 192.168.81.254
となっている。
よって、仮想マシンに固定IPを振る場合は、192.168.81.0/24の中で割り振れば良いらしい。
また、デフォルトゲートウェイ設定は、IPv4 WINSサーバの192.168.81.2にしたら、仮想マシンからインターネットに向けてpingが通った。



ホスト-ゲスト間でコピペできるようにする(失敗)

まずはVMware Toolsをインストールする。
仮想マシンを起動した状態で、Players > 管理 > VMware Toolsの再インストール
これで/media/VMware Toolsにマウントされてるので、
tar.gzを/rootへコピーして、展開して、.plを実行する。あとは全てENTER連打でOK。

仮想マシンをシャットダウンしたら、ホストマシン上で仮想マシンデータの保存先へ。
C:\vmware\ubuntu18_2
.vmxをテキストエディタで開く。
ubuntu18_2.vmx

以下パラメータを末尾に追記して保存。

isolation.tools.copy.disable = "FALSE"
isolation.tools.paste.disable = "FALSE"



しかし、コピペできなかった。
なので、共有フォルダ/mnt/hgfs/xxx経由でファイルをやり取りして、コピペ内容を受け渡しする事にした。

[vi]トラブルシューティング

kogepanmanの日記: vimでUnicodeのファイルが文字化け
https://srad.jp/~kogepanman/journal/472539/

メール文章をコピーしてメモ帳(notepad)にペーストして保存しようとしたら、Unicodeでないと文字が崩れる?とか言われた。
Unicodeで保存したものをGvimで開こうとしたら文字化けする。メモ帳だと見れる。

そんな場合は以下で対処。

:set enc=utf-16le
:e!

確かに見れるようになった。


メモ帳だと文字コードの指定は、ANSI、Unicode、Unicode Big endian、UTF-8が選択できる。
違いがよくわからなかったので調べてみた。以下サイトが参考になった。

文字コード「ANSI、Unicode、UTF-8 どれにしますか」
https://ameblo.jp/amuzo/entry-12328393171.html

ここを見ると、結局以下なんだって。すっきり。

話が長くなったが、Windowsのメモ帳の名前を付けて保存で言うところの文字コードは、
 ・「Unicode」は「UTF-16(リトル・エンディアン)」のこと
 ・「Unicode (Big Endian)」は「UTF-16(ビッグ・エンディアン)」のこと
 ・「UTF-8」はそのまま「UTF-8」のこと
である。

[Windows]コマンド2

Ansible

https://www.virtualbox.org/wiki/Downloads

以下のWindows hostsから
インストーラをダウンロードする。
VirtualBox 6.0.10 platform packages
Windows hosts

以下でインストールを実行。
VirtualBox-6.0.10-132072-Win.exe




vSphereクライアントインストール(ESXi 6.0.0)

https://my.vmware.com/jp/web/vmware/evalcenter?p=free-esxi6
ここからexeをダウンロード
VMware-viclient-all-6.0.0-5112508.exe

インストールを始めたら、以下エラーが出た。

VMware vSphere Client 6.0
エラー28173。セットアップでは、Microsoft.NET Framework
3.5を有効にできませんでした。.NETの問題を解決するのに
役立つMicrosoft KBの記事2734782および3002547を参
照してください。vSphere Clientをインストールする前に、
Windows Server Managerでこの機能を有効にする必要があ
ります。



OKで次に進むと、以下ウィンドウが出る。

Windowsの機能
お使いのPCにあるアプリには、Windowsの次の機能が必要です:
.NET Framework 3.5 (.NET 2.0および3.0を含む)


この機能をインストールする、をクリックしたら、すぐに終わった。

Windowsの機能
次の機能のインストールに成功しました:
.NET Framework 3.5 (.NET2.0および 3.0を含む)



次へ、にいくと、またエラーが。
VMware vSphere Client 6.0
The Microsoft Visual J# 2.0 Second Editionインストーラから、エラーコード「
4121」が返されました。


そもそものエラーである上記★について調べると、以下が見つかった。
https://kb.vmware.com/articleview?docid=2048098&lang=ja
解決策はvCenter Serverインストール前に NetFx3を手動でインストールすれば良いらしい。

NetFx3のインストールを調べてみると以下を発見。
https://blogs.technet.microsoft.com/askcorejp/2018/10/05/enable_net35_win10/
コントトールパネルから.NET Framework 3.5を有効にすれば良いらしい。
コントトールパネル > プログラムと機能 > Windowsの機能の有効化または無効化
 > .NET Framework 3.5 (.NET2.0および 3.0を含む)、にチェックを入れるが、既に■になってる。
 > +ボタンで展開すると、以下があったので、試しに両方チェックしてみた。

Windows Communication Foundation HTTPアクティブ化
Windows Communication Foundation 非HTTPアクティブ化


これで有効化した後に、再度VMware-viclient-all-6.0.0-5112508.exeでインストールしたら正常に終了出来た。




マウスポインタ速度変更

x280でオンボードのトラックポイントは十分早いのだが、USB Trackpointキーボードを使うとポインタが遅い。
コントロールパネルのマウスプロパティでは最高速になってるが。

レジストリエディタでもっと早くなるか実験。

https://mikasaphp.net/mause.html
ここを参考にした。

Win + R > regedit > HKEY_CURRENT_USER > Control Panel > Mouse
 > 以下の通り変更。

MouseSpeed = デフォルト 1 > 変更後 2 > さらに変更後 2
MouseThreshold1 = デフォルト 6 > 変更後 3 > さらに変更後 0
MouseThreshold2 = デフォルト 10 > 変更後 5 > さらに変更後 0

高速化、及びさらに高速化の2種類を試したが速度変わらず。
コントロールパネルのマウスプロパティで十分に高速化してるのでこれ以上変わらないみたい。
でも、オンボードとUSBキーボードでけっこう速度差が出るのはなぜだ?

(9/8追記)
以下の方法で解決できた。

https://support.lenovo.com/jp/ja/solutions/migr-73183
ThinkPad USB トラックポイントキーボードドライバー (10.8 MB) Windows 8/7/Vista/XP Ver1.12 発売2015年7月16日

ここからドライバthinkpad_usb_keyboard_with_trackpoint_112.exeをダウンロード。
これをインストールして、以下設定する事で、ポインタ速度が劇的に早くなった。
コントロールパネル > マウス > USB TrackPointタブが出現する。 > 感度の調整=軽くの方向へ最大にする

尚、この設定をしてもノートPCオンボードのトラックポイントの方は速度変わらず。




Firefoxブックマークを常に新しいタブで開く

Firefox URL欄でabout:config
 > browser.tabs.loadBookmarksInTabs で検索
 > ダブルクリックして、値をtrueにする
 > そのまま×で閉じて終了

[PC]ThinkPad X280画面輝度調整トラブル

ここ数日、Fn + 輝度調整ボタンが、効かない。
輝度調整メーターは動くのに、画面の輝度は全く変わらない。
ある時、非常に暗いままで固定されて、輝度調整が出来ないため困った。

使っているうちに、非常に暗い日、少し暗い日、そして今日は最大輝度に戻った。
輝度最大で文句ないのだが、相変わらず、輝度調整はできないまま。
なぜだ?
昨日インテルグラフィックのプロパティで色設定とかいじったからか?
原因がわからない。

調べてみると、Windows 10が何やら疑わしい感じだが。

[CentOS]コマンド4

Windowsからリモート接続(失敗)

z77 : CentOS 7.1.1503

https://qiita.com/SkyLaptor/items/56c9b5f5784f19cac225
ここを参考にやってみる。

# yum -y install xrdp
エラーになったので、メッセージ通りに--skip-brokenを付けて再実行。
# yum -y install --skip-broken xrdp
しかし、xorgxrdpなどがエラーでインストールされない。
# yum -y install tigervnc-server
こちらはインストール出来た。

https://higherhope.net/?p=3652
ここを見て以下やってみた。
# yum clean all
# yum update --enablerepo=cr xorgxrdp
これも失敗。



バージョン指定でカーネルをインストール(成功)

ここを参考にやってみる。
CentOS kernel version up
https://qiita.com/hihihiroro/items/5759b4ce98a226e6c25b
ここを見て、バージョン指定でカーネルを変更してみる。

カーネルモジュールのフルパスを確認するためにブラウザで以下へアクセス。
https://cdn.kernel.org/pub/linux/kernel/v4.x/
4.5系の最終バージョンをダウンロードする事にする。
linux-4.5.7.tar.gz

# cd /usr/local/src/
# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.5.7.tar.gz
# tar zxvf linux-4.5.7.tar.gz
# cd linux-4.5.7/
# KERNEL_VERSION=`uname -r`
# cp -i /boot/config-$KERNEL_VERSION ./.config
# make oldconfig
 ※ 聞かれたら、ひらすらENTERを押す。100個くらい?
# make -j4

 :
scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
 :



# yum -y install openssl-devel
 ※ Ubuntuとかでは、libssl-devらしい。
これでopenssl/bio.hが生成されたようなので、再度make
# make -j4
1時間くらい待っても終わらない。
画面が消えてしまって戻らないので、数時間後に見計らって電源長押しでOFF。

# make modules_install

 :
INSTALL /lib/firmware//9600.bin
DEPMOD 4.5.7


2分くらいで終わった。

# make install

sh ./arch/x86/boot/install.sh 4.5.7 arch/x86/boot/bzImage \
    System.map "/boot"



grub2.cfgはなかったので、grub2-efi.cfgに対して以下実行。
# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2-efi.cfg

CentOS Linux (4.5.7) 7 (Core)
CentOS Linux (4.5.7) 7 (Core) with debugging
CentOS Linux 7 (Core), with Linux 5.2.2-1.el7.elrepo.x86_64
CentOS Linux 7 (Core), with Linux 0-rescue-f08xxxxxxxxxxxxxxxx


カーネル4.5.7が入っている事が確認できた。

起動カーネル変更する。
# grub2-set-default 0
設定を反映する。
# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot
再起動後にカーネルバージョン確認すると、上がってた。
# uname -r



CentOSバージョンのダウングレード(失敗)

CentOS7のバージョン固定とダウングレードのやり方
https://www.jifu-labo.net/2018/05/centos7_ctrl_version/

ホスト: z77
現バージョン: 7.6.xxxx

まずはどのバージョンにダウングレードするか、目標のバージョン名を確認する。
http://ftp.iij.ad.jp/pub/linux/centos/

目標バージョンは、7.1.1503、にする。

以降rootになって作業。
# echo 7.1.1503 > /etc/yum/vars/releasever
 ※ releaseverは存在しなかったが、これで生成された。

以下を実行する前に、念のためCentOS-Base.repoをバックアップしておいた。
# sed -i".org" -e "s/^mirror/#mirror/" -e "s/^#baseurl/baseurl/g" -e "s/mirror.centos/vault.centos/g" /etc/yum.repos.d/CentOS-Base.repo

ダウングレードしようとするとsystemdが削除出来ないように保護されているため、このままでは出来ないとか。
削除保護用の設定ファイルを退避して、ダウングレード出来るようにする。
# mv /etc/yum/protected.d/systemd.conf /etc/yum/protected.d/systemd.conf.bak

キャッシュクリーン後にダウングレード実施。
# yum clean all
# yum distribution-synchronization

 :
Error: Package: libkadm5-1.15.1-37.el7_6.x86_64 (@updates/7)
      Requires: libkdb5.so.8()(64bit)
      Removing: krb5-libs-1.15.1-37.el7_6.x86_64 (@updates/7)
         libkdb5.so.8()(64bit)
      Downgraded By: krb5-libs-1.12.2-15.el7_1.x86_64
         -libkdb5.so.7()(64bit)
Error: nss-pem conflicts with nss-3.19.1-7.el7_1.2.x86_64
You could try using --skip-broken to work around the problem
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
anaconda-core-19.31.123-1.el7.centos.2.x86_64 has missing requires of fcoe-utils >= ('0', '1.0.12', '3.20100323git')
openmpi-1.8.4-1.x86_64 has missing requires of libpapi.so.5.2.0.0()(64bit)



エラーになった。
メッセージに従い、オプション付けてみた。
# yum distribution-synchronization --skip-broken
しかし、やっぱりエラー。



Bluetooth接続トラックポイントキーボード接続(成功)

ホスト: CentOS 7.6.1810

# systemctl enable bluetooth
# vi /etc/bluetooth/main.conf

AutoEnable=true


# hciconfig hci0 up
 ※ これをやらないと、後々scan onでFailed to start discoveryとなる。
# bluetoothctl
[bluetooth]# scan on

Discovery started
 :
ここでThinkPad Compact Bluetooth Keyboard with TrackPointが検出される。


# pair <キーボードのMACアドレス>
# connect <キーボードのMACアドレス>
connect successfully

これで接続できた。
しかし、OS起動時の自動接続がうまくいかない。




Ansibleでcobblerインストール(CentOS8 ansibleインストール失敗)

ホスト: h67
OS: CentOS8.0.1905

1.dvd1.isoからh67へOSインストール

2.yum -y update

3.EPELレポジトリ追加
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# rpm -ivh epel-release-latest-8.noarch.rpm

4.Ansibleインストール
# yum -y install ansible
っとやってもパッケージが見つからないので、以下方法で。

https://computingforgeeks.com/how-to-install-and-configure-ansible-on-rhel-8-centos-8/
# dnf -y install python3-pip
# pip3 install --upgrade pip
# pip3 install ansible --user

Traceback (most recent call last):
FIle "/usr/bin/pip3", line 7, in <module>
from pip import main
ImportError: cannot import name 'main'

なんかエラーになってしまう。

https://kokensha.xyz/python/python-pip3-cannot-import-name-main-error-after-upgrading-pip/
さっきpip3をアップグレードをしたのが間違いという情報見つけたので、
# yum remove python36
# yum -y install python36
っとやってみたが現象同じ。



Ansibleでcobblerインストール(CentOS7)

ホスト: h67
OS: CentOS7

1.minimal.isoからh67へOSインストール

2.yum -y update

3.Ansibleインストール
# yum -y install ansible

4.GNOME Desktopインストール(githubからansibleのプレイブックを入手するため)
# yum -y groupinstall "GNOME Desktop"

5.cobbler構築用のansibleプレイブックをダウンロード




Chromeインストール(CentOS7)

# vi /etc/yum.repos.d/google.chrome.repo


[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub


反映させる
# yum update

# yum -y install google-chrome-stable

rootだと起動にクセがあるようなので、一般ユーザで起動
# google-chrome-stable
これで起動する。



Ansibleの基本(CentOS7)

用意するサーバ
 ・Ansibleサーバ(h67): CentOS7
 ・操作対象(g33): CentOS7

操作対象側準備

# yum -y openssh-server
# vi /etc/hosts.allow
sshd: 192.168.xx.0
# systemctl start sshd
# systemctl enable sshd
# firewall-cmd --add-service=ssh --permanent


Ansibleサーバ側準備

# yum -y install ansible

# vi /etc/ansible/hosts
ここに操作対象のIPを羅列する。
Ansibleは安全のため、hostsに記載無いIP以外は対象外にするらしい。

localhost
192.168.xxx.yyy



自分自身で動作確認する場合は、以下も忘れずに。
# vi /etc/hosts.allow
sshd: 192.168.xx.0
# systemctl start sshd
# systemctl enable sshd


動作確認してみる。成功した。
# ansible localhost -m ping

localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}


自身でない操作対象に対して、何らかの操作をしてみる。
まずはプレイブックを書く。
# vi test.yml

- hosts: all ※ hostsとコロンの間は空白禁止!
tasks: ※ tasksとコロンの間は空白禁止! 行頭は空白2個。
- name: hogehoge ※ nameとコロンの間は空白禁止! 行頭は空白4個にして、tasksよりインデント下にする。
yum: name=vim ※ yumとコロンの間は空白禁止! 行頭は空白6個にして、ハイフンでなく、nameとインデント合わせる。


尚、file test.ymlで確認すると、ASCII textになってる。
.vimrcでの設定は、set encoding=utf-8、set fileformat=unixにしてる。
YAML形式?の基本がわかってなくて、空白の位置とかインデントやらでハマったので備忘録。

シンタックスに注意してやったら以下の通り成功した。
# ansible-playbook test.yml

PLAY [all] ****************************

TASK [Gathering Facts] ******************
ok: [192.168.xxx.yyy]

TASK [hogehoge]
ok: [192.168.xxx.yyy]

PLAY RECAP ******************
192.168.xxx.yyy : ok=2 changed=0 unreachable=0 failed=0




sshまとめ

クライアント側

自分の公開鍵を作る
# ssh-keygen -t rsa
ここでパスフレーズを入力すると、後々公開鍵を使ったsshをやっても、毎回パスフレーズを求められるようだ。

生成した公開鍵がある場所へ移動してからサーバ側へコピーする。
# scp -r id_rsa.pub user@192.168.xx.yy:/home/user

この時点では公開鍵を使わずに、パスワードでサーバ側へsshログインする。
# ssh user@192.168.xx.yy

サーバ側

クライアントからサーバ側へsshログインしたら以下。
# cd /home/user
# mkdir .ssh
# chmod 700 .ssh
# cd .ssh
# touch authorized_keys
# chmod 600 authorized_keys

クライアントからコピーしてきたid_rsa.pub内容をauthorized_keysへ追記。
# cat id_rsa.pub >> authorized_keys

作業が終わったら、サーバ側へのsshログインを終了。
# exit

クライアント側

あとは公開鍵を使って、sshログインできるようになる。
# ssh user@192.168.xx.yy

[CentOS]NVMe-oF構築(SPDK)

ここが参考になりまくる気がする。
http://metonymical.hatenablog.com/entry/2018/07/22/094004


Initiator設定

ホスト: g33

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
curl: (35) Cannot communicate security with peer: no common encryption algorithm(s).
Error:https://www.elrepo.org/RPM-GPG-KEY-elrepo.org: import read failed(2).

調べてみると、一気にrpm --importしないで、まずはlocalに落としてからrpmする、という掲示板あったが、
curlでやってもエラーなので、落とし方わからず。
もう1つは、curlをupdateすれば良いって。

# yum update curl
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
curlのupdateでエラー消えた。

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

現在のカーネルバージョンを調べる。
# yum list installed | grep kernel
kernel.x86_64       3.10.0-229.el7   @anaconda
kernel-devel.x86_64   3.10.0-229.el7   @anaconda
kernel-tools.x86_64   3.10.0-229.el7   @anaconda

カーネルアップグレード(kernel-mlは最新安定版を、kernel-ltは長期サポート版をインストールする)
# yum --enablerepo=elrepo-kernel install kernel-ml

# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

0 : CentOS Linux (5.2.2-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (5.2.2-1.el7.elrepo.x86_64) 7 (Core) with debugging
2 : CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64
3 : CentOS Linux 7 (Core), with Linux 0-rescue-76ab3xxxxxxxxxxxxxx



起動時のカーネルを0番の5.2.2-1に設定。
# grub2-set-default 0

grub.cfgへの反映してから、再起動
# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot



Target設定

ホスト: z77

まずは上記Initiator設定の通り進める。
それが終わったら、以下へ。

# yum remove kernel
 ※ この時、MLNX_OFEDカーネルが削除されたみたい。
# yum -y update kernel-tools-libs kernel-tools

# vi /etc/yum.repos.d/elrepo.repo

[elrepo-kernel]
 :
enabled=1 #0→1に修正



# yum swap kernel-tools-libs kernel-tools -- kernel-ml-tools-libs kernel-ml-tools
# yum -y install kernel-ml-devel kernel-ml-headers
 ※ ここでheadersがコンフリクトした
# yum list installed | grep kernel
記事では以下のようになってれば完了との事だがなってない。

kernel-ml.x86_64 4.18.4-1.el7.elrepo @elrepo-kernel
kernel-ml-devel.x86_64 4.18.4-1.el7.elrepo @elrepo-kernel
kernel-ml-headers.x86_64 4.18.4-1.el7.elrepo @elrepo-kernel
kernel-ml-tools.x86_64 4.18.4-1.el7.elrepo @elrepo-kernel
kernel-ml-tools-libs.x86_64 4.18.4-1.el7.elrepo @elrepo-kernel



# systemctl disable firewalld
# vi /etc/selinux/config

SELINUX=disabled


# setenforce 0

# vi /etc/default/grub

GRUB_CMDLINE_LINUX=の行末に追加
default_hugepagesz=1G hugepagesz=1G hugepages=8



上で保存後にgrubに反映、との事だが、grub2.cfgは存在せず、grub2-efi.cfgがある。
# grub2-mkconfig -o /etc/grub2-efi.cfg

次の手順は、記事では、3-3.NICのIPアドレス設定、になってるのでIP設定しようと思うが、現在HCAがInfinibandモードになってるので、イーサネットモードにすべきと理解。
そうなると、さっき削除してしまったMLNX_OFEDを再度インストールしないとダメかな。

# ./mlnxofedinstall

Logs dir: /tmp/MLNX_OFED_LINUX-2.4-1.0.4.3698.logs
The 5.2.2-1.el7.elrepo.x86_64 kernel is installed, MLNX_OFED does not have drivers available for this kernel.
You can run mlnx_add_kernel_support.sh in order to generate an MLNX_OFED package with drivers for this kernel.




http://hpcdiyc.hpc.co.jp/topics14.html
ここが参考になるかな。
# ./mlnx_add_kernel_support.sh --mlnx_ofed /home/bob/Download/MLNX_OFED_LINUX-2.4-1.0.4-rhel7.1-x86_64 --make-iso

ERROR: Kernel sources directory (/lib/modules/5.2.2-1.el7.elrepo.x86_64/build/) not found



確認してみると、
/lib/modules/5.2.2-1.el7.elrepo.x86_64/build/
は存在するがこれはリンクファイルであって、リンク先の
/usr/src/kernels/5.2.2-1.el7.elrepo.x86_64
が存在しない状況。

確かkernel-develでソースがインストールされたので、やってみる。
# yum -y install kernel-devel
 ※ これだと3.10バージョンがインストールされた。

カーネルバージョンに合ったバージョンを入れる。
# yum -y install kernel-devel-`uname -r`
しかし、存在しないと言われる。
No package kernel-devel-5.2.2-1.el7.elrepo.x86_64

ちょっと調べるとそもそも指定パッケージが間違ってたみたい。
# yum -y install kernel-ml-devel-`uname -r`
これでカーネルソースがインストールされた。

# ./mlnx_add_kernel_support.sh --mlnx_ofed /home/bob/Download/MLNX_OFED_LINUX-2.4-1.0.4-rhel7.1-x86_64 --make-iso

Note: This program will create MLNX_OFED_LINUX ISO for rhel7.1 under /tmp directory.
    All Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue? [y/N] : y
See log file /tmp/mlnx_ofed_iso.32359.log

Building OFED RPMs, Please wait...

ERROR: Failed executing "MLNX_OFED_SRC-2.4-1.0.4/install.pl -c /tmp/mlnx_iso.32359/ofed.conf --kernel 5.2.2-1.el7.elrepo.x86_64 --kernel-sources /lib/modules/5.2.2-1.el7.elrepo.x86_64/build/ --builddir /tmp/mlnx_iso.32359 --disable-kmp --build-only"
ERROR: See /tmp/mlnx_iso.32359.log



エラー原因を見るために指定されたlogを見てみる。
# vi /tmp/mlnx_iso.32359.log

Logs dir: /tmp/OFED.3974.logs
isert is not available on this platform
isert is not available on this platform
^[[31mKernel 5.2.2-1.el7.elrepo.x86_64 is not supported.^[[0m
^[[34mFor the list of Supported Platforms and Operating System see^[[0m
^[[34m/tmp/mlnx_iso.3945/MLNX_OFED_SRC-2.4-1.0.4/docs/OFED_release_notes.txt^[[0m



カーネルを5.2.2にしたのが原因かな?
RoCEv2はKernel4.5以上でサポートらしいので、4.5をインストールしたい。

# yum --enablerepo=elrepo-kernel install kernel-lt
これをやると、
4.4.186-1.el7.elrepo
がインストールされる。
バージョン指定でカーネルをインストールしないと4.5はインストール出来ないようだ。

別ページに書いた以下を参考にバージョン指定してカーネルをインストールする。
http://bobgosso.blog13.fc2.com/blog-entry-756.html

カーネルバージョンは指定通りになったが、気が付いたら、いつのまにかCentOS 7.6になってた。


7.1にダウングレードするために、別ページに書いた以下を参考。

[Windows]WSLメモ

Windows Subsystem for Linux

Ubuntu18.04.2ホームディレクトリ

C:\Users\ユーザ名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\
LocalState\rootfs\home\Ubuntuのユーザ名

[PC]XH110G

この前買ったベアボーンを組み上げてみた。

スリム型ベアボーン XH110G
https://shuttle-japan.jp/xh110g/

CPU: INTEL CELERON G3900 2.8GHz (グラフィック機能付)
メモリ: G.SKILL F4-2133C15S-8GRS (SODIMM DDR4)
OS: CentOS 7
ディスク: 2.5" SATA SSD
光学ドライブ: USB接続DVRP-UT8LK
キーボード: ThinkPad USB接続トラックポイントキーボード

この構成でCentOSインストール出来て、無事動いた。
このベアボーンはPCIe 16レーンのカードが一枚搭載できるので貴重。
何とか持ち運び可能なので検証用PCにしよう。

[PC]X1 carbon(2015)換装


http://lifebox.co.jp/post/20170103190000

ThinkPad X1 Carbon 3rd (2015) 型番20BT-CTO1WW

ちょうど同じ型番の換装記事があったのでメモ。

故障してしまったので、メモリを再利用しようと思ったが、裏蓋を外して、さらにLenovoの文字がある下半分を占めている板を外すためにねじを5か所外した。
それを浮かして中身を見てみたら、そこにもメモリDIMMは見当たらない。
もしオンボードメモリなら外せないのであきらめるしかない。

[AI]用語

(注)全てが参照先で説明してる訳ではない。個人的な理解(予想)で書いてる内容もあり。

YouTube①: Deep Learning入門:ニューラルネットワーク設計の基礎
https://www.youtube.com/watch?v=O3qm6qZooP0

YouTube②: Deep Learning入門:Deep Learningでできること
https://www.youtube.com/watch?v=FwuBbj8F6cI

YouTube③: Deep Learning精度向上テクニック:様々なCNN #1
https://www.youtube.com/watch?v=UximUEjPQco

YouTube④: Deep Learning精度向上テクニック:様々な活性化関数
https://www.youtube.com/watch?v=cTvJ-jj63U4

YouTube⑤: Deep Learning入門:ニューラルネットワーク学習の仕組み
https://www.youtube.com/watch?v=r8bbe273vEs

書籍①: ゼロから作るDeep_Learning_Pythonで学ぶディープラーニングの理論と実装

-----------------------------------------------
YouTube① Feed Forward : 入力層(Input Layer)から出力層(Output Layer)へ左から右へ進むもの

YouTube① Affine : 入力ニューロンと出力ニューロンが全結合してる関数。重みWも入力x出力の数だけ必要。

YouTube① Tanh : (タンエイチ) 活性化関数の1つ。

YouTube① Affine + Tanh : 1層分のニューロンの構成の1つ。

YouTube① Affine + Softmax : 出力層によく使われる構成。Softmaxは出力の合計が1になる特徴。

YouTube① DNN : Deep Neural Network。全結合の(?)Neural Network

YouTube① CNN : Convolutional(畳み込み演算) Neural Network。畳み込みNeural Network

YouTube① Convolution :

 入力画像を例えば5x5の複数の異なるフィルタ(例:ぼかし)で畳み込みし、複数(例:6種)の画像を出力する演算(関数)。
 重みWは画像の各ピクセル毎に同じ数値。
 1枚画像で25個のWなら、そのフィルタ数分(例:6枚なら25個x6枚=150個)だけ重みが必要。
 Affineの重みより少なくて済む。



YouTube① max pooling関数 :

 ダウンサンプリングの処理の1つ。
 隣接ピクセルで最大値を取り、ダウンサンプリングする。
 例:解像度を縦横半分にする。



YouTube① average pooling関数 :

 ダウンサンプリングの処理の1つ。
 隣接ピクセルで平均値を取り、ダウンサンプリングする。



YouTube① CNN構成例 :

  例:入力画像28x28x1枚 ->
   Convolution(例:処理画像24x24xフィルタ6枚分) ->
    maxpooling(例:処理画像12x12xフィルタ6枚分) ->
    tanh ->

       convolutoin(例:処理画像8x8xフィルタ16枚分) ->
       maxpooling(例:処理画像4x4xフィルタ16枚分) ->
       tanh ->

          affine(4x4x16=256ピクセル分と全結合) ->
          tanh(256から120にする) ->
             affine ->
             softmax(数字0~9分の10出力にする)

 以下の1層を構成する構造(例)を何個もつなぎ合わせる事で多層ネットワークを構成していく。
   Affine層(全結合) = 全結合(Affine) + 活性化関数(Tanh)
   Convolution層   = 畳み込み(Convolution) + ダウンサンプリング(maxpooling) + 活性化関数(Tanh)



YouTube② Semantic Segmentation :

 ピクセル単位の物体認識。出力層は入力画像に対するピクセル毎のカテゴリ。
 入力画像のピクセル毎にどういった物体か?というデータを用意して学習すればよい。



YouTube② 画像キャプショニング : 入力は画像で、その画像の説明文章を説明する機能。

YouTube② Visual 画像キャプショニング : 入力は画像で、その画像の説明文章を説明する機能。

YouTube③ カーネルサイズ : (別サイトも見て調べた。)画像フィルターの事。畳み込み(Convolution)層の処理において、カーネル(もしくはフィルター)と呼ばれる格子状の数値データと同サイズの部分画像(ウィンドウ)の数値データを、積和演算して変換する。

YouTube③ AlexNet : 2012年にDLを使って画像認識の性能を大きく向上させたCNNのテクニック(構造)。

YouTube③ ResNet : 2015年に登場したCNNのテクニック(構造)。

YouTube③ Inception-v4 : 2016年に登場したCNNのテクニック(構造)。

YouTube③ 1x1(Pointwise) convolution : one by one convolution。空間方向のフィルタ処理がなく、画像枚数を調整したい場合に用いられる。例:画像512枚で3x3フィルタ処理を行うには大き過ぎるので、1x1 Convolutionで画像枚数を128枚にしてから、3x3フィルタ処理を行う、という例。

YouTube③ ResNetX :

 ResNetX = Grouped Convolution + 1x1 Convolution
 通常、出力画像は全ての入力画像を参照するニューロン接続構成にしていたが、画像枚数が増えると演算が膨大。
 そこで考えたのがGrouped Conv。例えばGroup数=画像枚数/2とすると、2枚の入力画像と1枚の出力画像がグループになる。
 このグループの間だけで3x3フィルタ処理を行う。しかし、このままではグループ外の入力画像は出力画像に反映されない。
 そのために、Grouped Convの後に、1x1 Convを入れて、全ての入力画像が出力画像に反映できるようにする。



YouTube③ Seperable Convolution :
 上のGrouped Convを究極に突き詰めたもの。Xceptionという論文で発表。

YouTube④ ReLU :

 活性化関数の1つ。
 何らかの非線形関数なら活性化関数として機能する。
 ReLUの登場によって、多数のニューラルネットワークが可能になった。
 従来はTanhがよく使われていたが、0付近は傾き線形だが、0から離れると勾配がほぼ0になってしまう。
 NN学習の仕組みとしてBack Propagationがあり、勾配を前の層に伝搬させていく過程で勾配の乗算がある。
 しかしTanhだと、入力の絶対値が大きくなると勾配がほぼ0になるため、勾配が前の層に戻らない問題あり。
 一方、ReLUは0以上の入力で勾配は常に1なので、前の層に勾配が伝わり易い。



YouTube⑤ ミニバッチ勾配降下法 :

 Mini-Batch Gradient Descent
 ニューラルネットワークにおいて、乱数で初期化された重みWを更新していく時の手法。
 動作手順
  1.学習データからミニバッチと呼ばれる複数個のデータ(例:256個程度)を取得。
  2.ミニバッチを用いて、Forward計算を実施。現Wによる出力Yとロス(最小化したい値)Eを算出。
  3.Backward計算(ロスEの逆伝搬)を行い、Wの勾配を求める。勾配は、その地点における接線の傾き(微分dE/dW)。
    計算方法の1つがBack Propagation。
  4.Update(求めたWの勾配で現Wを更新)。 ロスEが小さくなる方向に更新。 W' = W - η(イータ)dE/dWという計算。



YouTube⑤ Back Propagation :
 どんな複雑なNNでもパラメータ勾配を求めるには、「出力から順にさかのぼりながら勾配を計算する事で合成関数の微分を行う。」
 ◆やりたい事
   ロスEが最小となる重みwとバイアスbを求めたい。
   Eが最小になるのは、wとbそれぞれ、勾配が0になる地点。(常に勾配0地点がロスE最小ポイントか??)
   そのために、ロスEから重みwの勾配、及びバイアスbの勾配を計算したい。
 ◆前提条件
  Affine層の出力Y=重みw x 入力値x + バイアスb、Squared ErrorロスE = (y -t)^2
 ◆Eのwに関する微分を求めるために、まずはEの出力yに関する勾配を求める
   E = (y - t)^2の微分は、dE/dy = 2(y - t)
 ◆yの勾配からwの勾配を求める
   まずは合成関数の微分で用いるテクニックでこのように変換。dE/dw = dE/dy dy/dw
   このうちyの勾配(dE/dy)は既に求めてる。残るはyをwで微分したものが必要。
   y= w * x + bなので、wにかかっている係数はx。よって、yをwで微分したらxになる。
   よって、上で求めた式を変形してdE/dw = dE/dy * x = 2(y - t) * x、となる。
 ◆同様に、bの勾配も求める
   まずは式変換。dE/db = dE/dy dy/db
   さらに、yをbで微分すると、y式からbには何もかかってないため、結果1になる。
   この結果で式を変換して、dE/db = dE/dy dy/db = dE/dy * 1 = dE/dy = 2(y - t)、となる。
 ◆これまでの流れで、どんな複雑な構成でも、各ノードの勾配を計算できる。

[AI]Caffe

長ったらしく経緯を書いてるけど、内容まとめると以下の感じ。

1.Caffeインストール(WSL、1回目、失敗)
  WSLで進めたけど、import caffeでエラーになる。
2.最初からCaffeインストールやり直し(WSL、import caffeまで成功!)
  これをやってimport caffeまでできたけど、その後のMNISTによる学習準備でエラー。WSLの問題と予想し、VMwareへ。
3.WSLをやめてVMwareでやり直し(途中)
  今ここ。


1. Caffeインストール(WSL、1回目、失敗)

https://qiita.com/t_takii/items/de9d83b47baf6697ae6b

WSL(Windows Subsystem for Linux)のUbuntu18.04.2 LTS(カーネル4.4.0-17763-Microsoft)にて作業。

$ sudo apt-get update
$ sudo apt-get install -y --no-install-recommends libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev libopenblas-dev protobuf-compiler
$ sudo apt-get install the python-dev

$ sudo apt install git
$ git clone https://github.com/BVLC/caffe.git

$ sudo apt-get install -y python-pip python-numpy python-scipy python-skimage python-protobuf

$ cd caffe
$ cp Makefile.config.example Makefile.config
$ vi Makefile.config

# 以下、編集箇所のみ赤字
CPU_ONLY := 1 ※コメントアウトを解除
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/



$ sudo ln -s /usr/lib/x86_64-linux-gnu/libhdf5_serial.so.100.0.1 /usr/lib/x86_64-linux-gnu/libhdf5.so
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.100.0.0 /usr/lib/x86_64-linux-gnu/libhdf5_hl.so

$ sudo vi ~/.bashrc

# 最終行に追加
export PYTHONPATH=/home/bob/caffe/caffe/python/:$PYTHONPATH


$ source ~/.bashrc

CPU数確認
$ nproc
8

CPU数を指定してコンパイル
$ make all -j8

 :
&:build_release .) /``build_release'undefinedlibcvcv/
/::lib.referencelibcaffe.so::/build_release :imdecodeimdecodelibcaffe.so/to ((:lib undefinedcvcv /` ::undefinedlibcaffe.socvreference:: :: _InputArray_InputArrayreference :to undefinedimdecode constconstto (`&& referencecvcv,,` :: cvto::intint: _InputArrayimdecode)):` (''imdecodecvconstcv

(:&:collect2: error: ld returned 1 exit status
cv:,:collect2: error: ld returned 1 exit status
:imdecode _InputArray:(int _InputArraycv)const :'&const:
,&_InputArray , int const)int&')collect2: error: ld returned 1 exit status
,
'Makefile:635: recipe for target '.build_release/tools/compute_image_mean.bin' failed

make: *** [.build_release/tools/compute_image_mean.bin] Error 1
intcollect2: error: ld returned 1 exit status
Makefile:635: recipe for target '.build_release/tools/upgrade_solver_proto_text.bin' failed
)collect2: error: ld returned 1 exit status
make: *** [.build_release/tools/upgrade_solver_proto_text.bin] Error 1
'Makefile:635: recipe for target '.build_release/tools/upgrade_net_proto_binary.bin' failed

make: *** [.build_release/tools/upgrade_net_proto_binary.bin] Error 1
collect2: error: ld returned 1 exit status
Makefile:635: recipe for target '.build_release/tools/convert_imageset.bin' failed
make: *** [.build_release/tools/convert_imageset.bin] Error 1
Makefile:635: recipe for target '.build_release/tools/caffe.bin' failed
make: *** [.build_release/tools/caffe.bin] Error 1
Makefile:635: recipe for target '.build_release/tools/extract_features.bin' failed
make: *** [.build_release/tools/extract_features.bin] Error 1



エラーを調べたら以下掲示板を発見。
https://github.com/BVLC/caffe/issues/2348
ここでこんな事言ってる。

aseempatni commented on 7 Sep 2015
Thanks @hongzhenwang. That helped.

Added LIBRARIES += glog gflags protobuf leveldb snappy \ lmdb boost_system hdf5_hl hdf5 m \ opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs to Makefile.config

I used make clean instead of rm -rf ./build

Then did make all and everything worked fine.



真似してやってみる。
$ vi Makefile.config
最終行に以下を追加。

LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs


$ sudo make clean
$ sudo make all -j8
これで確かにエラーなく終わった。

 :
CXX examples/mnist/convert_mnist_data.cpp
CXX examples/siamese/convert_mnist_siamese_data.cpp
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
CXX/LD -o .build_release/tools/caffe.bin
CXX/LD -o .build_release/tools/compute_image_mean.bin
CXX/LD -o .build_release/tools/convert_imageset.bin
CXX/LD -o .build_release/tools/extract_features.bin
CXX/LD -o .build_release/tools/upgrade_net_proto_binary.bin
CXX/LD -o .build_release/tools/upgrade_net_proto_text.bin
CXX/LD -o .build_release/tools/upgrade_solver_proto_text.bin
CXX/LD -o .build_release/examples/cifar10/convert_cifar_data.bin
CXX/LD -o .build_release/examples/mnist/convert_mnist_data.bin
CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin
CXX/LD -o .build_release/examples/cpp_classification/classification.bin



$ sudo make test -j8

 :
LD .build_release/src/caffe/test/test_softmax_with_loss_layer.o
LD .build_release/src/caffe/test/test_solver.o
LD .build_release/src/caffe/test/test_solver_factory.o
LD .build_release/src/caffe/test/test_split_layer.o
LD .build_release/src/caffe/test/test_spp_layer.o
LD .build_release/src/caffe/test/test_stochastic_pooling.o
LD .build_release/src/caffe/test/test_syncedmem.o
LD .build_release/src/caffe/test/test_tanh_layer.o
LD .build_release/src/caffe/test/test_tile_layer.o
LD .build_release/src/caffe/test/test_threshold_layer.o
LD .build_release/src/caffe/test/test_upgrade_proto.o
LD .build_release/src/caffe/test/test_util_blas.o



$ sudo make runtest -j8
こんな感じで正常に終わったみたい。

 :
[ OK ] CropLayerTest/0.TestCropAll (0 ms)
[ RUN ] CropLayerTest/0.TestCropAllGradient
[ OK ] CropLayerTest/0.TestCropAllGradient (110 ms)
[----------] 11 tests from CropLayerTest/0 (969 ms total)

[----------] 3 tests from TanHLayerTest/0, where TypeParam = caffe::CPUDevice
[ RUN ] TanHLayerTest/0.TestTanHGradient
[ OK ] TanHLayerTest/0.TestTanHGradient (2 ms)
[ RUN ] TanHLayerTest/0.TestTanH
[ OK ] TanHLayerTest/0.TestTanH (0 ms)
[ RUN ] TanHLayerTest/0.TestTanHOverflow
[ OK ] TanHLayerTest/0.TestTanHOverflow (0 ms)
[----------] 3 tests from TanHLayerTest/0 (6 ms total)

[----------] Global test environment tear-down
[==========] 1162 tests from 152 test cases ran. (36402 ms total)
[ PASSED ] 1162 tests.




PyCaffe化(WSL、1回目、失敗)

ここからはこちらを参考。
https://qiita.com/t-hiroyoshi/items/3bba01dd11b1241f1336

runtestが通ったのでCaffeのbuildは成功。
次にこれをPyCaffeできるようにする。
以下でPyCaffeに必要なライブラリをpipで一気に入れる。
$ cd python
$ for li in $(cat requirements.txt); do sudo pip install $li; done
こんな感じで終わった。

 :
Collecting python-gflags>=2.0
Downloading https://files.pythonhosted.org/packages/df/ec/e31302d355bcb9d207d9b858adc1ecc4a6d8c855730c8ba4ddbdd3f8eb8d/python-gflags-3.1.2.tar.gz (52kB)
100% |████████████████████████████████| 61kB 529kB/s
Installing collected packages: python-gflags
Running setup.py install for python-gflags ... done
Successfully installed python-gflags-3.1.2
The directory '/home/bob/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/bob/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: pyyaml>=3.10 in /usr/lib/python2.7/dist-packages
The directory '/home/bob/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/bob/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: Pillow>=2.3.0 in /usr/lib/python2.7/dist-packages
The directory '/home/bob/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/bob/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: six>=1.1.0 in /home/bob/.local/lib/python2.7/site-packages



次はPyCaffeをbuild
xxx@x280:~/caffe/caffe/python$ cd ../
xxx@x280:~/caffe/caffe$ make pycaffe

CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
touch python/caffe/proto/__init__.py
touch: cannot touch 'python/caffe/proto/__init__.py': Permission denied
Makefile:657: recipe for target 'python/caffe/proto/__init__.py' failed
make: *** [python/caffe/proto/__init__.py] Error 1



$ sudo make pycaffe
エラー出たのは単にsudoが足りなかったらしい。

touch python/caffe/proto/__init__.py
PROTOC (python) src/caffe/proto/caffe.proto



$ sudo make distribute

# add proto
cp -r src/caffe/proto distribute/
# add include
cp -r include distribute/
mkdir -p distribute/include/caffe/proto
cp .build_release/src/caffe/proto/caffe.pb.h distribute/include/caffe/proto
# add tool and example binaries
cp .build_release/tools/caffe.bin .build_release/tools/compute_image_mean.bin .build_release/tools/convert_imageset.bin .build_release/tools/extract_features.bin .build_release/tools/upgrade_net_proto_binary.bin .build_release/tools/upgrade_net_proto_text.bin .build_release/tools/upgrade_solver_proto_text.bin distribute/bin
cp .build_release/examples/cifar10/convert_cifar_data.bin .build_release/examples/cpp_classification/classification.bin .build_release/examples/mnist/convert_mnist_data.bin .build_release/examples/siamese/convert_mnist_siamese_data.bin distribute/bin
# add libraries
cp .build_release/lib/libcaffe.a distribute/lib
install -m 644 .build_release/lib/libcaffe.so.1.0.0 distribute/lib
cd distribute/lib; rm -f libcaffe.so; ln -s libcaffe.so.1.0.0 libcaffe.so
# add python - it's not the standard way, indeed...
cp -r python distribute/




$ python
Python 2.7.15+ (default, Nov 27 2018, 23:36:35)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Pythonインタプリタを起動した後、import caffeでエラーなく終了すれば動作成功との事だが、エラー出た。

Traceback (most recent call last):
File "", line 1, in
File "/home/bob/caffe/caffe/python/caffe/__init__.py", line 1, in
from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
File "/home/bob/caffe/caffe/python/caffe/pycaffe.py", line 15, in
import caffe.io
File "/home/bob/caffe/caffe/python/caffe/io.py", line 2, in
import skimage.io
File "/usr/lib/python2.7/dist-packages/skimage/__init__.py", line 158, in
from .util.dtype import *
File "/usr/lib/python2.7/dist-packages/skimage/util/__init__.py", line 7, in
from .arraycrop import crop
File "/usr/lib/python2.7/dist-packages/skimage/util/arraycrop.py", line 8, in
from numpy.lib.arraypad import _validate_lengths
ImportError: cannot import name _validate_lengths





2. 最初からCaffeインストールやり直し(WSL、import caffeまで成功!)

https://stackoverflow.com/questions/54603645/caffe-import-error-even-after-installing-it-successfully-on-ubuntu-18-04
上のエラーに出会ったやつは、ここの記事で以下の手順で試せとある。


1 Answer
Problem solved:  xxxx
xxx
Let me give step by step guidance to install caffe successfully in Ubuntu 18.04 LTS:
1] sudo apt-get install -y --no-install-recommends libboost-all-dev
 :



試してみる。

$ sudo apt-get install -y --no-install-recommends libboost-all-dev
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
# git clone https://github.com/BVLC/caffe
# cd caffe
# cp Makefile.config.example Makefile.config
pipが無い場合はインストールしておく。
# sudo apt install python-pip python3-pip
# sudo pip install scikit-image protobuf
# cd python
# for req in $(cat requirements.txt); do sudo pip install $req; done
# cd ../
# vi Makefile.config
CPU_ONLY := 1 --> uncomment
OPENCV_VERSION := 3. --> uncomment
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs --> add to last line

$ sudo make all
このエラーは想定内らしい。

 :
CXX src/caffe/layers/flatten_layer.cpp
CXX src/caffe/layers/hdf5_data_layer.cpp
src/caffe/layers/hdf5_data_layer.cpp:14:10: fatal error: hdf5.h: No such file or directory
#include "hdf5.h"
^~~~~~~~
compilation terminated.
Makefile:591: recipe for target '.build_release/src/caffe/layers/hdf5_data_layer.o' failed
make: *** [.build_release/src/caffe/layers/hdf5_data_layer.o] Error 1



$ sudo apt-get install libhdf5-dev
$ vi Makefile.config

赤字を追加
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial



$ sudo make all
確かにエラーが消えた。

 :
CXX/LD -o .build_release/tools/upgrade_net_proto_text.bin
CXX tools/upgrade_solver_proto_text.cpp
CXX/LD -o .build_release/tools/upgrade_solver_proto_text.bin
CXX examples/cifar10/convert_cifar_data.cpp
CXX/LD -o .build_release/examples/cifar10/convert_cifar_data.bin
CXX examples/cpp_classification/classification.cpp
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
CXX examples/mnist/convert_mnist_data.cpp
CXX/LD -o .build_release/examples/mnist/convert_mnist_data.bin
CXX examples/siamese/convert_mnist_siamese_data.cpp
CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin



$ sudo make test
$ sudo make runtest
$ sudo make pycaffe

掲示板の手順ではmake pycaffeでエラー出るかも、とある。
特にエラーは出なかったが、1回目のインストールの時と違う設定なので以下の通り修正しておく。
$ vi Makefile.config

PYTHON_INCLUDE := /usr/include/python2.7 /usr/local/lib/python2.7/dist-packages/numpy/core/include


$ source ~/.bashrc

これで再度import caffeを試す。
$ python
>> import caffe
さっきと同じく、こんなやつが出る。

 :
from numpy.lib.arraypad import _validate_lengths
ImportError: cannot import name '_validate_lengths'



調べると、skimage package.をアップグレードしたら解決したという記事あり。
https://stackoverflow.com/questions/54241226/importerror-cannot-import-name-validate-lengths

$ pip install --upgrade scikit-image
再度試してみたら、10秒ほどかかったが、正常にimport caffeができた(エラーなく終了した)。これで環境整備完了。
$ python
>>> import caffe
>>>


MNIST学習(WSLだと失敗)

https://qiita.com/t-hiroyoshi/items/2bf473fd06c352d97579

WSL起動。
$ cd /home/bob/caffe/caffe
$ sudo ./data/mnist/get_mnist.sh

Downloading...
--2019-07-05 10:56:49-- http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
Resolving yann.lecun.com (yann.lecun.com)... 216.165.22.6
Connecting to yann.lecun.com (yann.lecun.com)|216.165.22.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9912422 (9.5M) [application/x-gzip]
Saving to: ‘train-images-idx3-ubyte.gz’

train-images-idx3-ubyte 100%[==============================>] 9.45M 1.60MB/s in 7.0s

2019-07-05 10:56:57 (1.35 MB/s) - ‘train-images-idx3-ubyte.gz’ saved [9912422/9912422]

--2019-07-05 10:56:57-- http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
Resolving yann.lecun.com (yann.lecun.com)... 216.165.22.6
Connecting to yann.lecun.com (yann.lecun.com)|216.165.22.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 28881 (28K) [application/x-gzip]
Saving to: ‘train-labels-idx1-ubyte.gz’

train-labels-idx1-ubyte 100%[==============================>] 28.20K 178KB/s in 0.2s

2019-07-05 10:56:58 (178 KB/s) - ‘train-labels-idx1-ubyte.gz’ saved [28881/28881]

--2019-07-05 10:56:58-- http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
Resolving yann.lecun.com (yann.lecun.com)... 216.165.22.6
Connecting to yann.lecun.com (yann.lecun.com)|216.165.22.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1648877 (1.6M) [application/x-gzip]
Saving to: ‘t10k-images-idx3-ubyte.gz’

t10k-images-idx3-ubyte. 100%[==============================>] 1.57M 793KB/s in 2.0s

2019-07-05 10:57:00 (793 KB/s) - ‘t10k-images-idx3-ubyte.gz’ saved [1648877/1648877]

--2019-07-05 10:57:00-- http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
Resolving yann.lecun.com (yann.lecun.com)... 216.165.22.6
Connecting to yann.lecun.com (yann.lecun.com)|216.165.22.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4542 (4.4K) [application/x-gzip]
Saving to: ‘t10k-labels-idx1-ubyte.gz’

t10k-labels-idx1-ubyte. 100%[==============================>] 4.44K --.-KB/s in 0s

2019-07-05 10:57:00 (110 MB/s) - ‘t10k-labels-idx1-ubyte.gz’ saved [4542/4542]



Caffeで画像認識させるために、先のダウンロードデータをLMDB形式に変換。
$ sudo ./examples/mnist/create_mnist.sh

Creating lmdb...
I0705 11:02:20.452775 55 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
I0705 11:02:20.454550 55 convert_mnist_data.cpp:88] A total of 60000 items.
I0705 11:02:20.454649 55 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
F0705 11:02:20.480227 55 db_lmdb.hpp:15] Check failed: mdb_status == 0 (-30796 vs. 0) MDB_CORRUPTED: Located page was wrong type
*** Check failure stack trace: ***
@ 0x7f608b81c0cd google::LogMessage::Fail()
@ 0x7f608b81df33 google::LogMessage::SendToLog()
@ 0x7f608b81bc28 google::LogMessage::Flush()
@ 0x7f608b81e999 google::LogMessageFatal::~LogMessageFatal()
@ 0x7f608bd4323d caffe::db::LMDBTransaction::Commit()
@ 0x7f608c403189 convert_dataset()
@ 0x7f608c40247a main
@ 0x7f608a7f1b97 __libc_start_main
@ 0x7f608c4024ca _start
Aborted (core dumped)



今更だけど、CAFFE_ROOTを~/.bashrcへ追加しても結果変わらず。
export CAFFE_ROOT=/home/bob/caffe/caffe

https://github.com/BVLC/caffe/issues/6578
ここ見ると、WSL使ってると同じエラーが出て、WSLでないUbuntuだと成功したって言ってる。




3. WSLをやめてVMwareでやり直し(import caffe成功、MNIST学習成功)

Ubuntu18.04.2 LTS (Bionic Beaver)
カーネル4.15.0-45-generic

$ sudo apt-get install -y --no-install-recommends libboost-all-dev
E: Unable to locate package なんとかでエラーで止まった。
$ sudo apt-get update
$ sudo apt-get install -y --no-install-recommends libboost-all-dev
パッケージ名が間違っている訳ではないので原因が不明だったが、アップデートしてから再度やってみたらエラー消えた。
$ sudo apt-get -y install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
# git clone https://github.com/BVLC/caffe
# cd caffe
# cp Makefile.config.example Makefile.config
# sudo apt install python-pip python3-pip
# sudo pip install scikit-image protobuf
# cd python
# for req in $(cat requirements.txt); do sudo pip install $req; done
# cd ../
# vi Makefile.config
CPU_ONLY := 1 --> uncomment
OPENCV_VERSION := 3. --> uncomment
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs --> add to last line

$ sudo make all > 失敗する

 :
src/caffe/layers/hdl5_data_layer.cpp:14:10: fatal error: hdf5.h: No such file or directory
#include "hdf5.h"
~~~~~~~~~
compilation terminated.
Makefile:591: recipe for target '.build_release/src/caffe/layers/hdf5_data_layer.o' failed
make: *** [.build_release/src/caffe/layers/hdf5_data_layer.o] Error 1



$ sudo apt-get install libhdf5-dev
$ vi Makefile.config

赤字を追加
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial



$ sudo make all
$ sudo make test
$ sudo make runtest
$ sudo make pycaffe

CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
python/caffe/_caffe.cpp:10:10: fatal error: numpy/arrayobject.h: No such file or directory
#include
~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Makefile:517: recipe for target 'python/caffe/_caffe.so' failed
make: *** [python/caffe/_caffe.so] Error 1



arrayobject.hが無いというので探してみたら、
/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/arrayobject.h
にあった。Makefile.configのパスが間違ってた。
$ sudo vi /home/bob/caffe/Makefile.config

PYTHON_INCLUDE := /usr/include/python2.7 \
修正前 /usr/lib/python2.7/dist-packages/numpy/core/include
修正後 /usr/local/lib/python2.7/dist-packages/numpy/core/include



$ sudo make pycaffe

CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
touch python/caffe/proto/__init__.py
PROTOC (python) src/caffe/proto/caffe.proto


今度は成功した。

$ python
>>> import caffe

Traceback (most recent call last):
File "", line 1, in
ImportError: No module named caffe



こんなエラーが出た。原因はbashrcにパスが無いかららしい。
なので以下を追記。
$ vi ~/.bashrc

export PYTHONPATH=/home/bob/caffe/python



$ python
>>> import caffe
>>>
今度は成功した。

$
$ ./examples/mnist/create_mnist.sh

Creating lmdb...
I0706 11:14:06.001570 78478 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
I0706 11:14:06.005759 78478 convert_mnist_data.cpp:88] A total of 60000 items.
I0706 11:14:06.006155 78478 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
I0706 11:14:06.978487 78478 convert_mnist_data.cpp:108] Processed 60000 items.
I0706 11:14:07.033179 78479 db_lmdb.cpp:35] Opened lmdb examples/mnist/mnist_train_lmdb
I0706 11:14:07.034142 78479 convert_mnist_data.cpp:88] A total of 10000 items.
I0706 11:14:07.034878 78479 convert_mnist_data.cpp:89] Rows: 28 Cols: 28
I0706 11:14:07.220436 78479 convert_mnist_data.cpp:108] Processed 10000 items.
Done.



$ sudo ./examples/mnist/train_lenet.sh

I0706 11:28:43.753690 78506 caffe.cpp:204] Using GPUs 0
F0706 11:28:43.754091 78506 common.cpp:66] Cannot use GPU in CPU-only Caffe; check more.
*** Check failure stack trace: ***
@ 0x7f19xxxxxx google::LogMessage::Fail()
 :
Aborted (core dumped)


CPU-onlyである事を忘れてた。

$ sudo vi ./examples/mnist/lenet_solver.prototxt

solver_mode: CPU ※ GPUからCPUへ変更



これで再度トレーニングを実施。
$ sudo ./examples/mnist/train_lenet.sh

 :
I0706 11:50:35.xxxxx 78590 solver.cpp:347] Iteration 10000, loss = 0.00282926
I0706 11:50:35.xxxxx 78590 solver.cpp:347] Iteration 10000, Testing net (#0)
I0706 11:50:35.xxxxx 78590 data_layer.cpp:73] Restarting data prefetching from start.
I0706 11:50:35.xxxxx 78590 solver.cpp:414] Test net output #0: accuracy = 0.99
I0706 11:50:35.xxxxx 78590 solver.cpp:414] Test net output #1: loss = 0.028678 (* 1 = 0.028678 loss)
I0706 11:50:35.xxxxx 78590 solver.cpp:250] Optimization Done.
I0706 11:50:35.xxxxx 78590 caffe.cpp:250] Optimization Done.


だいたい10分くらいで完了かな。

https://qiita.com/t-hiroyoshi/items/2bf473fd06c352d97579

これで、.examples/mnist/lenet_iter_10000.caffemodelが出力された学習済モデル。
これを読み込めば、MNISTの学習後の状態を再現できる。

[Windows]SMBマルチチャネル

PowerShellコマンド

https://www.atmarkit.co.jp/ait/articles/1512/25/news053.html

※サーバー側のマルチチャネルの有効化と無効化
Set-SmbServerConfiguration -EnableMultiChannel $true
Set-SmbServerConfiguration -EnableMultiChannel $false
※クライアント側のマルチチャネルの有効化/無効化
Set-SmbClientConfiguration -EnableMultiChannel $true
Set-SmbClientConfiguration -EnableMultiChannel $false

※SMBネットワークインターフェース情報の取得
Get-SmbServerNetworkInterface
Get-SmbClientNetworkInterface
※NIC情報の取得
Get-NetAdapter
※RSSをサポートしているかどうかの確認
Get-NetAdapterRSS
※RDMAをサポートしているかどうかの確認
Get-NetAdapterRDMA
※NICのハードウエア情報の取得
Get-NetAdapterHardwareInfo



https://www.ipentec.com/document/windows-change-tcp-receive-side-scaling-parameter

Receive-Side Scaling (RSS) の有効・無効の設定コマンド。
管理者権限でコマンドプロンプトを開くと実行可能。
netsh int tcp set global rss=enabled
netsh int tcp set global rss=disabled

x280でenableにしたらOKで終了したが、その後PowerShellで
Get-SmbClientNetworkInterface
で確認するとRSSはFALSEのまま。
コントロールパネル > ネットワーク接続 > 任意のNICで右クリック > プロパティ > 構成 > 詳細設定
を開いて、RSS関連の項目が無いNICはRSS非対応と思うので、EnabledコマンドでOKが返っても意味ないのかも。

[AI]Mythic

用語

バッチサイズ

https://qiita.com/kenta1984/items/bad75a37d552510e4682

DLのように内部で確率的勾配降下法を使う場合、データセットを幾つかのサブセットに分けて学習する。
幾つかのサブセットに分けて学習する理由は、学習する際に異常値の影響を小さくするため。
この幾つかに分けたぞれぞれのサブセットに含まれるデータの数をバッチサイズと呼ぶ。
例えば、1,000件のデータセットを200件ずつのサブセットに分ける場合、バッチサイズは200。


参考情報

機械学習とかDeep Learningを学ぶ前に知っておくべき基礎の基礎
https://dev.classmethod.jp/machine-learning/fundamental-matters-to-know-before-learning-machine-learning-and-deep-learning/




Mythic YouTube

12:26 Other Applications Are Similar

Decision Making : Cicumstances(状況、環境、境遇) to Actions
Actuation : Physical Goals to Motor Control
Speech Processing : Waveforms to Words/Phonems(音素)
Text to Speech : Words to Waveforms


18:49 DNN Processing is All About Weight Memory

AlexNet、ResNet-18などのNetwork
それぞれのWeightが61M、11M (10+Mの保存すべきパラメータがある)
積和演算機MACの数は、725M、1.8Bなどもある。
これらを@30FPSの処理で考えると、MACの30倍の22B、54Bといった計算量になる。(20+Bのメモリアクセスになる)
これらのリソースをエッジソリューションにフィットさせる事は非常に難しい。


19:09 Energy Efficiency Translates to Performance

ResNet-50 @ 4K(579B MACs/Frame)を考えてみる。
1 秒間に 1 ジュールの仕事が行われるときの仕事率が 1 ワット。 W = J / s
1pJ(ピコジュール) = 1E^-12 J
もし1MACあたり、1pJの消費電力量だったら、1Wあたり1E^12(=1000G)個のMACを動かす事が出来る。
Camera System = Thermal Limit of 5W
 50pJ/MAC > 5W制限では100GMAC/sを動かす事が出来る > 1Frameで579B MACs必要だから、0.17FPS分のMAC計算量しかない。
 同様に、10pJ/MACだったら0.86FPS、0.5pJ/MACだったら17.3FPS。
 つまり、1MACが0.5pJで動いても17.3FPSしか処理出来ない。
17.3FPSならUsable。
セキュリティカメラなら有用。

33:53 Revisiting Matrix Multiply

入力データと掛け合わせるNeuron Weights行列をFlash Transistorsで構築する。


34:00 Analog Circuit Give us the MAC we need

35:13 DACs& ADCs Give us the flexible Architecture
Programmability (XLA/ONNX -> Mythic IPU)

TensorFlow コンパイラ 「XLA」を提供
https://developers-jp.googleblog.com/2017/03/xla-tensorflow-compiled.html

・TensorFlow は柔軟で拡張可能なシステムを目指して設計されており、任意のデータフロー グラフを定義して、それらのグラフをCPU や GPU などのさまざまな計算デバイスに分散させ、効率的に実行できるようになっています。
・XLA は、ユーザーが作成した TensorFlow グラフを JIT コンパイル技術により実行時に分析します。ランタイムにおける実際の次元や型に応じて特化したグラフをを生成し、複数の演算をまとめて、CPU や GPU、カスタム アクセラレータ(Google の TPU など)などで効率的に実行できるバイナリコードを生成します。



https://www.itmedia.co.jp/news/articles/1709/08/news051.html

・米Microsoftと米Facebookは9月7日(現地時間)、AI(人工知能)開発者がフレームワーク間のスイッチを簡単にできるようにするオープンソースプロジェクト「Open Neural Network Exchange(ONNX)」を公開したと発表した。GitHubで公開されてる。

・ONNXは、あるAIフレームワークで構築した学習モデルを異なる機械学習システムに簡単に切り替えることを目的としており、Facebookの「Caffe2」と「PyTorch」、Microsoftの「Cognitive Toolkit(CNTK)」をサポート。




36:25 Mythic Mixed Signal Computing
Single Tile = DAC -> Weight Storage & Analog Matrix Multiplier -> ADC, SRAM, RISC-V, SIMD, Router
タイルがお互いに通信する。

37:17 Mythic Mixed Signal Computing
Single Tile --> Tiles connected in a Grid --> Expandable Grid of Tiles(Exmaple DNN mapping(Post-Silicon) )

・我々はそれらをチップの異なる領域にマッピングすることによってシステム上の複数のアプリケーションをサポートすることができる。
・そのため、アプリケーションを物理的なハードウェアのグリッドにマッピングするFPGAのように考えることができます。
・FPGAで複数のアプリケーションをサポートしたい場合は、FPGAを複数の領域に分割することができます。

37:49 System Overview
Intelligence Processing Unit (IPU)

・システムは完全にタイルベースの設計なので、システムは高度に設定可能で拡張可能です。
・we have our initial product which has 50 million weight capacity PCI Express 2.1 with four channels
・すぐに別バージョンをテープアウトする。
 - Envisioned(想像される) Customization
  Up to 250M weight
  PCIe 2.1 x16
  USB3.0/2.0
  Direct Audio/Video interfaces
 Enhanced Control Processor (e.g. ARM)

38:51 System Overview
Mythic is a PCIe Accelerator

Mythic IPU (Inference Model (*1) <----(data via PCIe)-- / --(inference result via PCIe)--> Host SoC(OS, App, Interface, Mythic IPU Driver)

[PC]PXEブート対応INTEL EXPI9400PT

CobblerでOS自動インストールをする場合は、PXE対応LANポートが必要だが、オンボードLANでPXE対応のマザーボードはそれほど多くない。
そのため増設NICでPXE対応のものを探していたが、貴重なx16レーンとかx8レーンはつぶしたくない。
一方、だいたいのマザーはx1レーンが数レーンあるが、x1レーンのカードってそれほど無くて余っている事が多い。

x1レーンを有効活用するためにも、x1レーンでPXE対応のNICを探してみたところ、
インテル PRO/1000 PT サーバ・アダプタ EXPI9400PT
これが良いんでないか?という結論になった。

早速試してみると、
g33 > DEL > BIOSセットアップ > どれか良くわからないのでRealtek Boot AgとLS120をBOOT優先順位上位へ
Cobblerサーバを起動した状態でg33を起動してみると、Cobblerからの自動インストール画面へ進めた。

PXE対応にしたいPCがあったら、このNICを使おう。

[PC]M.2 SATA to USB変換アダプタ

X1 carbonが逝ってしまったので、データだけでも救い出したい。
以前換装したWD M.2 SATAからデータを取り出したいので、以下を購入してみた。

M.2 to USB3.0アダプタ、M.2 BキーSATA SSDからUSB 3.0アダプタ
https://www.amazon.co.jp/USB3-0%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%80%81M-2-B%E3%82%AD%E3%83%BCSATA-SSD%E3%81%8B%E3%82%89USB-3-0%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%80%81%E5%A4%96%E4%BB%98%E3%81%91USB%E3%81%8B%E3%82%892280-M2%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%80%81NGFF%E3%82%B3%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BF%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%82%AB%E3%83%BC%E3%83%89/dp/B07QY75252/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=M.2+USB+SATA+%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF&qid=1561288392&s=gateway&sr=8-5

商品の紹介画像にも注意書きがあるが、M.2だからといって、電気的I/FがPCI Expressとは限らないので注意。
自分が買ったX1 carbonはM.2だけどSATA I/Fのタイプだったので、換装用SSDもM.2 SATAのもの。

まずはOSのisoを取り出し。
320MB/sほど出る。まずまずのスペックかな。

[PC]YouTube字幕srtダウンロード

YouTube動画の字幕をテキストファイルとして保存したい場合は次のサイトでまずはsrtファイルをダウンロードする。

https://downsub.com/

URL入力欄にYouTube動画のURLを入力してDownloadボタンをクリック。
すると言語毎のDownloadボタンが出てくるので、好きな言語のDownloadボタンをクリック。
すると、字幕ファイルであるsrtファイルを入手出来る。

これをGvimで開いてみると、連番と時間と字幕がテキスト形式で閲覧出来る。
ここまで来れば、Gvimのテキスト処理コマンドで以下のようになれば字幕以外の行は消せる。

:g/^[0-9][0-9]*$/d これで数字だけの行、つまり連番の行を全て削除できる。
:g/^00:/d これで時間の行を全て削除できる。
:g/^$/d 空白行はこれで削除。

いちいち改行してあるのが気に入らなければ、ずっとShift + Jを押し続ければ1行に結合してくれる。

[Ubuntu]コマンド4

ネットワーク設定・再起動(18.04)
/etc/network/interfaceはもう使ってないとか。

今はこちらを編集する。
# vi /etc/netplan/50-cloud-init.yaml

network:
ethernets:
ens33:
addresses:
- 192.168.1.180/24
gateway4: 192.168.1.1
dhcp4: false
nameservers:
addresses:
- 8.8.8.8
version: 2


# ip addr flush dev ens33
# systemctl restart networking
こんな感じに編集して、以下で反映と思ったら、networkingがnot foundになる。




TensorFlowインストール

host = Windows 10 Home Windows Subsystem for Linux
/etc/os-release = Ubuntu 18.04.2 LTS
uname -r = 4.4.0-17763-Microsoft


UbuntuでTensorFlowを動かしてみる
https://cpoint-lab.co.jp/article/201801/1235/

sudo apt update
sudo apt install python-pip python-dev
# CPU版入手
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
# GPU版はこちら
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

python
ここから対話モードで以下を入力すると結果が次のように表示された。
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)
42

これで正常に動いてるらしい。


GNOMEインストール

$ sudo apt-get update
$ sudo apt-get install ubuntu-gnome-desktop




後からGUIインストール(18.04)

# apt-get update
# apt-get -y install ubuntu-desktop
かなり長い。15分くらいかな。
# shutdown -r now
これでGUI環境で起動された。

[PC]x280購入

4年前に買ったX1 carbonが故障した。電源ボタンを押しても何にも反応が無い。
ACアダプタの代わりにモバイルバッテリーでも充電試したが同じ症状なので、ACアダプタの故障ではないと判断。
どうにもならないので新ノートPCとしてX280を購入。

X1 carbonでも良かったのだが、もしかしたら14インチであの薄さを実現した事によって剛性が落ちたのでは?と予想。
X1より前に買ったX230はまだ正常稼働してるので、X230の系列でX280にした。

注文から到着まで

6/8土 AM10時前に注文
6/11火 AM1:30頃 商品出荷の案内メールが来た。
6/15土 18:00頃 宅急便が配送に来た。

多少はカスタマイズしたが、なかなかに早いと思う。


セットアップ

初期ガイダンス : だいたいはOFFに
初期ガイダンス : 指紋は登録
コントロールパネル > システム > システム詳細設定 > パフォーマンス > パフォーマンスを優先する
コンピュータ名とワークグループを変更
Firefoxをインストール > 既定ブラウザに登録
Firefox Syncアカウントログイン
Firefox プライバシー > 履歴を一切記憶させない
Microsoft Officeインストール > X1で使用中だったので、このプロダクトキーは既に使用中と言われる > マイクロソフトアカウントからインストール > PCにインストールします。 > インストールする > x64を選択してインストール > exeを保存 > この製品のライセンスを確認できませんでした。 > とりあえずそのままインストールを進める。 > ふつーに使えるようになった。X1からライセンス移行が出来たのかな?
コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化 > Windows Subsystem for Linuxにチェック
Windows Product Key Viewerでシリアルを確認
http://www.rjlsoftware.com/software/utility/winproductkey/download.shtml
Windowsキー > 設定ボタン > プライバシー > 全般
  Windows追跡アプリの起動を許可してスタート画面と検索結果の質を向上します > OFFへ
  設定アプリでおすすめコンテンツを表示する > OFFへ
Windowsキー > 設定ボタン > プライバシー > アクティビティ履歴 > このデバイスでのアクティビティの履歴を保存する > OFFへ
Windowsキー > 設定ボタン > ゲーム > ゲームバーを使ってゲームクリップ・・・ > OFFへ
Windowsキー > 設定ボタン > デバイス > タッチパッド > OFFへ
奥の辺のSDカードスロットへmicroSDXC挿入
バックアップソフトBackupを使ってSDカードへ定期バックアップ
Windowsキー > 設定ボタン > 更新とセキュリティ > 開発者向け > 開発者モード

Windowsキー > Microsoft Store > 右上の検索でUbuntuを検索 > Ubuntu 18.04 LTSをクリック > 入手 > インストール後、起動 > ウィンドウが開き、インストールが継続される。 > インストール完了したら、ガイダンス通りにユーザ名とパスワードを登録して完了。

コントロールパネル > キーボード > カーソルの点滅速度 > 最速へ
コントロールパネル > マウス > Thinkpad > タッチパッド > Windowsの[設定]の[高精度タッチパッド]セクションにあります > OFFへ
香り屋からGvim 64bitをダウンロード > 展開して、gvim.exeショートカットを「送る」へ設定
Gvimインストールフォルダ > gvimrc > colorscheme evening を有効にする。
.txtのプログラムをgvim.exeに設定


[PC]SATA rev 3.3

SATA rev 3.3のSSDが認識できない症状を聞いた。

ちょっと調べてみると、以下の記事を発見。

2016.9.8 SATA 3.2+の“3.3V問題”が解消されたHGST製10TB HDDが店頭販売中
https://akiba-pc.watch.impress.co.jp/docs/news/news/1018885.html

・SATA3.2+では先行サポートの「Power Disable」機能に対応(正式サポートはリビジョン3.3)。
・Power Disableはデータセンター向けの新たな電源管理機能。SATA電源コネクタの従来の3.3Vラインを電源管理に用いることで実現するもの。具体的な機能については「HDDのハードウェアリセットを行なえるようになる」(HGST)という。
・これによっていわゆる“3.3V問題”が発生。Power Disableにより3.3Vラインの電源供給機能が無くなる(1番、2番ピンが未使用の「Reserved」、3番ピンが制御用の「PWDIS」に変更される)ことで、従来の電源ユニットとの互換性が失われた。
・実際のトラブル例は「SATA 3.1以前のSATA電源ケーブルを接続しても、ドライブの電源が入らない」。1~3番ピンを接続しないことで解決が可能。1~3番ピンが結線されていないペリフェラル4ピン-SATA電源変換ケーブルを使ってトラブル回避可能。



2016.7.19 最新HDD事情あれこれ Part.2
https://blog.tsukumo.co.jp/fukuoka/2016/07/SupportBlog1607_03_HDD_Part2.html


・Serial ATA revision 3.2(以下SATA 3.2)自体は2013年に策定された。
・2016年になってSATA 3.2に準拠したドライブが登場。
・SATA 3.2での大きな変更として、電源コネクタの仕様が変わり、3.3Vの電源供給が廃止された。
 その代わりに3.3Vに使用されていた3つのピンのうち、2つはReserve。1つはPower Disable Controlとなった。
・これによって、SATA 3.2に準拠したドライブにSATA 3.1以前のSATA電源ケーブルを接続しても、ドライブの電源は入りません。




SSD
価格.comのGB単価の安い方から調べてみる。

COLORFUL SL500 640G SATA3.0
https://www.links.co.jp/item/sl500-640g/


GREEN HOUSE GH-SSDR2SAシリーズ SATA Revision 3.2
 https://www.green-house.co.jp/products/gh-ssdr2sa/

磁気研究所 HDSSD480GJP3 SATA3.1
 http://www.mag-labo.com/?p=6712

Samsung SSD 860 QVO SATA3.0
 https://www.itgm.co.jp/product/ssd-860-qvo-2-5-inch.php#spec


HDD

Seagate SATA revision記載が見つからない。
https://www.seagate.com/jp/ja/internal-hard-drives/hdd/barracuda/?sku=ST4000DM004#specs-3-5


WDの仕様書見てみてもSATA revision書いてない。
https://www.wd.com/content/dam/wdc/website/downloadable_assets/jpn/spec_data_sheet/2879-771436.pdf


東芝 MG08ACA16T SATA3.3
https://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/docs/product/storage/product-manual/eHDD-MG08-Product-Overview.pdf

東芝 MG07ACA16TE(512e) SATA3.3
https://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/docs/product/storage/product-manual/eHDD-MG07ACA-Product-Manual.pdf

東芝 MG06ACA600E(512e) SATA3.3
https://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/docs/product/storage/product-manual/eHDD-MG06ACA-Product-Manual.pdf

東芝 MG04ACA500E(512e) SATA2.6/3.0
https://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/docs/product/storage/product-manual/eHDD-MG04ACA-Product-Manual.pdf

東芝 MN07ACA12T(512e) SATA3.3
https://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/docs/product/storage/product-manual/eHDD-MN-Product-Manual.pdf.pdf

東芝 MN06ACA10T(512e) SATA3.3
東芝 MN05ACA800(512e) SATA3.3
東芝 MN05ACA600(512e) SATA3.1
東芝 MN04ACA400      SATA3.1
https://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/docs/product/storage/product-manual/eHDD-MN-Product-Manual.pdf.pdf


SATAトランスポートバージョンの確認

WindowsならHWiNFOが良い感じ。
例えばコンピュータ名z68の解析をすると。
z68 > Drives > TOSHIBA MD03ACA200V: ATA Transport Version Supported = SATA 3.0
z68 > Drives > SAMSUNG SSD 840 EVO 250GB: ATA Transport Version Supported = SATA 3.0


Linuxならhdparmかな。これでSATAリビジョンが見えるそうな。
hdparm -I /dev/sda

/dev/sda:

ATA device, with non-removable media
Model Number: TOSHIBA THNSNH128GCST
Serial Number: XXXXX
Firmware Revision: XXXX
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards
 :

[CentOS]cobblerで全自動インストール

電源ボタンをぽちっとしたら、勝手に希望のOSがインストールされる、というのをやってみたい。

cobblerサーバから起動は出来たが、あれこれトラブルシューティングしたので、何が本当に必要な設定か混乱。
確認してまとめるので、しばらくメモレベル。

<注意点の覚書>
dnsmasqは未使用。
/etc/resolv.conf  192.168.10.1、8.8.8.8のみ
/etc/hosts ansjenk、lrepo、gitlab、cobblerを登録
/etc/xinetd.d/tftp ※ インストールした後、disable=noにするだけ。


トラブルシューティング

PXEブートに成功するが、PXE32 TFTP open timeoutとなる

注意点1: /etc/hosts.allow への登録不足。 vsftpd、smb、nmb、samba、tftpd、in.tftpd
注意点2: SELinuxはdisableへ
注意点3: firewalldはとりあえずstop。(ちゃんと動作してから、その後にfirewalldを起動して適切なポート開放をすれば良い)
注意点4: xinetdをインストール(yum -y install xinetd)、及びサービス起動されているか?(xinetdが無いとtftpdサービスがactiveでも動かないみたい)


cobblerサービスが正常起動しない(確かこの症状)

注意点1: /etc/cobbler/settings ※ 以下いずれもコロンの後は「半角空白」を入れる。そうしないとYAML形式にならないらしい。
「default_password_crypted: 」の後に記載する暗号化パスワードフレーズは以下コマンドで生成出来る。
openssl passwd -1
この文字列を記載する際、「default_password_crypted:」の後に空白無しで続けて記載したらcobblerサービスが正常起動せず。

manage_dhcp: 1
manage_dns: 1
manage_tftpd: 1
restart_dhcp: 1
restart_dns: 1
pxe_just_once: 1
next_server: 192.168.10.130
server: 192.168.10.130
default_password_crypted: xxxxxx




dhcpdサービスが正常起動しない(確かこの症状)

注意点1: /etc/dhcp/dhcpd.conf ※ subnetの記述だけにして、それ以降はコメントアウトでなく削除。コメントアウトではエラーが。
subnet 192.168.x.x xxxx { xxx }のくくりだけにした。
その後はコメントアウト、という説明の記事がいくつかあったが、なぜかサービス起動に失敗するので、削除してみたら動いた。


TFTP open timeout問題解決し、cobblerからPXEブート進むが、/dev/root does not existで止まる

注意点1: /var/lib/tftpboot/pxelinux.cfg/default のNICデバイス名指定は実名と一致しているか?

あるPCでは、最新のCentOS 7 1810のインストールが途中で止まる問題(確か後述のWarningと同じ)があったので、代わりに
CentOS 7 1511のDVDを使ったら正常にインストール出来た、という経験があった。
一方、cobblerでもCentOS 7 1511のisoを使い、PXEブートして、先に進むようになったが、以下で止まってしまう。
e1000e: eno1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
IPv6: ADDRCONF(NETDEV_CHANGE): eno1: link becomes ready
となって、1分くらい止まった後、
dracut-initqueue[593]: Warning: dracut-initqueue timeout - starting timeout scripts
が大量に出て、最後は以下で止まる。

dracut-initqueue[593]: Warning: Could not boot.
dracut-initqueue[593]: Warning: /dev/root does not exist
Starting Dracut Emergency Shell...
Warning: /dev/root does not exist
Generating "/run/initramfs/rdsosreport.txt"

Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.

dracut:/#



z77でやった場合、途中のWarningメッセージ見て、インストーラが対象としてるNICデバイス名がeno1である事を認識。
一方、原因を探りいろいろ調べていくうちに、違ったポイントで以下のファイルの設定を変えて原因解決したブログを発見。
http://d.hatena.ne.jp/none06/20140720/1405865713

この方のブログでの対策は行わなかったが、これがきっかけで以下の設定ファイルの存在に気づき、
ksdevice=eth0になっている事を発見。
/var/lib/tftpboot/pxelinux.cfg/default
ここをksdevice=eno1に修正し、そのまま再度試したらcobblerでの全自動インストールに成功した。
ちなみに、cobbler syncを行うと、このdefaultが新たに生成されて元のeth0に戻ってしまうので注意。
このeth0の指定は、cobblerインストール時の設定で確か自分がしたもの。
さらに、実際のNIC名をeno1ではなく、eth0の名前にする方法もどっかに記載あったと記憶。後でやってみよう。

念のため違うPCでも実験。
x230の場合、NICデバイス名はenp0s25だった。
/var/lib/tftpboot/pxelinux.cfg/default
のあるプロファイルだけksdevice=enp0s25として、起動時にそのプロファイルを選んだら、この問題はクリア出来て先に進んだ。
しかし、
5) Installation Destination (No disk selected)
Not enough space in file system for the current software selection. An additional 2861.02 MiB is needed.
との指摘。
これは挿入されているSSDに既にWindowsが入っていての容量不足問題なのでこの件とは無関係。

[Windows]ベンチマーク

CrystalDiskMark 6.0.1 x64, 1GiB

z68 --(USB)--> G 使用率90% (RS-EC32-U3R):

Seq Q32T1 Read 25.32MB/s、 Write 24.56MB/s
4KiB Q8T8 Read 0.532MB/s、 Write 2.058MB/s
4KiB Q32T1 Read 0.537MB/s、 Write 1.925MB/s
4KiB Q1T1 Read 0.517MB/s、 Write 2.084MB/s


z68 --(USB)--> E 使用率88% (HD-WLU3):

Seq Q32T1 Read 43.02MB/s、 Write 40.57MB/s
4KiB Q8T8 Read 0.544MB/s、 Write 1.328MB/s
4KiB Q32T1 Read 0.562MB/s、 Write 1.272MB/s
4KiB Q1T1 Read 0.544MB/s、 Write 1.287MB/s


z68 --(USB)--> H 使用率90% (HD-WLU3):

Seq Q32T1 Read 222.1MB/s、 Write 229.5MB/s
4KiB Q8T8 Read 0.458MB/s、 Write 0.330MB/s
4KiB Q32T1 Read 0.453MB/s、 Write 0.339MB/s
4KiB Q1T1 Read 0.461MB/s、 Write 0.341MB/s

[PS4]ボイスチャット断絶

相手の声はクリアに聞こえるのに、自分の声が相手にはぶつぶつ切れたり、
聞こえなかったり。

設定 > ネットワーク > ネットワーク診断する

をやると、ダウンロードは30Mbpsくらいあるのに、アップロードは3Mbpsくらい。
これが原因か?
PS4無線接続ではアップロードがせいぜい8Mbpsくらいにしかならなかったので、
諦めて有線接続にした。

その結果、アップもダウンも80Mbpsくらいになり、ボイスチャットで相手が自分の声が聞こえないとかいう症状は直ったようだ。

にしても、PS4とルータを無線で直結しても数Mbpsしか出ないって何故?
デバイス性能不足?
カレンダー
11 | 2019/12 | 01
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード