FC2ブログ

掃除機比較(コード有 vs コードレス)


①電源コード有: 2005年製 三菱電機ホーム機器 「TC-BE10P形(床移動形)」 吸込仕事率 620W
②電源コードレス: 2019年製 アイリスオーヤマ 「IC-SLDC4-W」 吸込仕事率 ?W

比べるべきものでは無いように思うが、所管。

①: 確か33000円くらいだった。
電源コード必要で毎回引き出し面倒。
しかし、吸い込み口に回転するブラシがあって、強力吸引。
大き目の紙屑とか、床に付着したゴミ、なんかもぐんぐん吸い取れる。
いろんなゴミが落ちやすいリビングで活躍。

②: 確か9000円以下。
電源コードレスで簡単。軽い。すぐに使える。
しかし、基本は空気吸入だけなので、吸引力が弱い。
うちの床に落ちてる、髪の毛、紙の切れ端、付着した食べかす、なんかはほぼ吸い取れない。
ちり・ホコリ、小さいゴミ専用だね。
リビングのゴミには対応できないものが多く、基本チリとかホコリしかない、PC作業部屋用へ。


金額は高いが、満足するにはやはりコードレスのダイソンも検討に入れるべきだったのか・・・?
スポンサーサイト



[Ubuntu]ddでOSイメージクローン

ディスク内容を丸々コピーしたい。

sdd : マスター(HDD)
sdc : スレーブ(SSD)

スレーブをマスターの容量と合わせるため、まずはマスターのセクタ数調べ。
# fdisk /dev/sdd
  > pで総セクタ数表示される。

次に、スレーブSSDの容量を、マスターセクタ数指定してクリッピング。
# hdparm -N p10000 /dev/sdc

最後に、マスター
# dd if=/dev/sdd of=/dev/sdc bs=512 conv=sync,noerror
 ※ セクタ512Bづつ、マスター(sdd)からスレーブ(sdc)へデータ丸ごとコピーするコマンド。
   conv=sync,noerrorのsyncは、マスターのあるセクタがREADエラーになっても、
   そのセクタは0で埋めてスレーブにコピーしてくれる。syncが無いと不良セクタあった時にずれるらしい。
   noerrorは、エラーがあっても継続する、の意味。

以下参考にした。
http://weblog.rukihena.com/archives/2006/05/dd_convsyncnoer.html

コピー完了後の確認してないが、うまくいってるはず。

[PC]QNA-T310G1T

ThinkPad x280のThunderboltポートを有効活用するために、
QNAPのTB3 to 10GbEアダプタを買ってみた。

QNA-T310G1T
https://www.qnap.com/ja-jp/product/qna-tb-10gbe

日本のAmazonで買うとイラっとするくらい高いけど、米Amazonで買えば輸送費入れてもけっこう安く買える。

さっそく使ってみる。

1.まずは開封。MAC用シールが貼ってあるせいか、白基調の非常にきれいな箱。
  入ってるセットアップガイド見ると、やはり10GチップはAquantiaだね。今はMarvelだけど。
2.x280を起動しておく。
3.QNA-T310G1Tをx280に接続。USB type Cケーブルの左右は関係ないみたい。
4.「xxx変更を許可しますか?」と出るのでYES
5.Thunderboltデバイスの承認 > 接続したいデバイスを選択してください = 常に接続 > OK
6.イーサネットコントローラをセットアップしています、とメッセージ出る。 > セットアップ完了、とメッセージ出る。
7.コントロールパネル > ネットワーク接続 > TAP-Windows Adapter V9というアダプタ名で認識

しかし、NETGEAR XS505Mに接続してもPHYがリンクアップしてくれない。
(ネットワーク接続で「ネットワークケーブルが接続されていません」となってる。PHYがリンクアップすればここは有効になるはず)
NETGEAR XS708Eも同じく、リンクアップしない。

製品の箱に書いてあった、Aquantiaドライバ入手先にいってもホームページがなくなってる。
Marvellのサイトにあった。

https://www.marvell.com/support/downloads/driverSearchResults.do
2019/11/12 Marvell AQtion Windows 64-bit Driver   2.1.19

ドライバ更新しようとしても、既に最適なドライバーが入ってる、と言われるので、一度ドライバを削除してから入れる。

8.デバイスマネージャで、TAP-Windows Adapter > プロパティ > デバイスを削除(ドライバ削除にチェック)
9.Marvellサイトから入手したドライバzipを解凍して、その他の欄で?になってるネットワークコントローラ > ドライバインストール時に指定
10.するとデバイスマネージャ上でQNA-T310G1Tとして認識された。
11.そのまま待ってるとXS505Mとリンクアップした。XS708Eともリンクアップ成功。


x280 --> QNA-T310G1T --> XS505M --> h170(X520-DA2)※sambaサーバ

この構成でCentOS iso 6GBをコピーしてみた。
最初は150MB/sで、1GbEの理論値はこえてるので、10G接続なんだけど遅いなと思ってたら、途中から最後までは404MB/sだった。

QNA-T310G1TのJumbo Packet設定をDisableから16384Bytesに変更しても最高速は406MB/sとほぼ変わらず。
尚、中盤から終盤までは下限は150MB/sまでを下がったり404MB/s付近に上がったり、不安定。

sambaサーバNIC(X520-DA2)のMTU設定を16384Bytesにしてみても最高速は404MB/sだが、今度はほぼずっと404MB/sを保つようになった。

x280はNVMe SSD使ってて、h170はSATA SSD RAID0 x 5本なので、もっと性能出ても良い気がするが。
fioでWrite性能が120MB/s程度にしかなってないので、何か問題があるのか、そもそもメーカーが公表してるスペックとの条件違いか。

[PC]LHR-4BRHEU3 HDD換装(作業中)

HDD1TB x 4本、RAID0では容量が足りなくなってきたので、HDD 2TB x 4本に換装する。

まずは稼働中の本製品をPCから安全に取り外し、電源をOFF。
次に全編パネルを開いて、HDDを取り出す。(中にある鉄板プレートも上の2つのフックを下方向に下げれば引き出せる)
新HDDへ、引き出し用のプラスチックプレートを付け替える。
新HDDを本製品へ装着。
電源ONすると、PCに自動的に認識されたので、念のため余計なパーティションは全て削除しておく。
 コントロールパネル > 管理ツール > コンピュータの管理 > ディスクの管理
PCからDeviceの取り外し、を行う(PCからの認識を外さないと後述の背面RAIDボタン長押しが機能しない)
PCからDevice認識を外した状態で以下の初期設定手順に従いRAID0にする。

ユーザーズマニュアル 2.5.1 ボリューム構成を設定する
https://dl.logitec.co.jp/downloadfile/DLfile/LST-M/LHR-4BH_um_v05.pdf

具体的には以下。
 1.前面MODEボタン長押し(3秒以上) > MODEが点滅する
 2.MODEボタンを数回押してRAID0の所までもっていく > RAID0が点滅
 3.背面RAIDボタン(プレートを外すと見える)を長押し(5秒以上) > 本体の電源が切れる
    ※ ただし、前面LED見てみると電源LEDがオレンジについた状態。
      ここで前面電源LEDを長押しすると完全に切れた。
 4.前面電源ボタンを一回押すと起動する。


これで行けると思ったが、起動するとRAID0でなく、ディスクの管理画面でSINGLEで認識された。
原因解析中。

その後も同じ手順で、MODE長押し > RAID0設定 > RAIDボタン > 電源ON
を繰り返したら、なぜかRAIDボタンで電源が完全に消える時があった。
そこから電源ONすると、ディスクはRAID0として1つのドライブで認識された模様。
しかし、ディスクの管理から、ディスクの初期化を行うと、GPT、MBR共にエラーとなる。

[PC]HD-WLU3/R1 FW更新

RATOC RS-EC32-U3R同様、2TB x 2本から3TB x 2本にしたいが、同じ症状でエラー出てる。
FW更新したら行けるのでは?と思いやってみる。

https://www.buffalo.jp/support/download/detail/?dl_contents_id=60864

ここから、ファームウェア アップデーター(Windows) をダウンロード。
hd-wxu3_rev121.exe

製品をWindows PCに接続した状態で、このツールを実行すると自動的に以下認識された。

現在のバージョン: V03L01R06-10:1
新しいバージョン: V03L01R11-10:1



アップデートボタンで進み、出力されたメッセージの通り、以下手順で再起動する。

1.タスクトレイにあるハードウェアの取り外しアイコンで、PCから本製品を取り外す。
2.背面の電源スイッチをOFF(OFF側へ) > 全てのランプ消灯 > 再度電源スイッチON(AUTO側へ)



すると、ブザーが鳴り、コンピュータの管理、ディスクの管理、の画面を開くとディスクの初期化ウィンドウが自動的に出た。
しかし、元のように、GPTでもMBRでもエラー。
このFWでも3TB x2本は認識できないのかな?

[PC]RS-EC32-U3R FW更新

2TB x 2本のRAID0で運用してきたが、容量不足により3TB x 2本に換装してみる。

RATOC RS-EC32-U3R
http://www.ratocsystems.com/products/subpage/rsec32u3r.html

しかし、単にHDDを入れ替えてWindows PCに接続すると、以下状態

コントロールパネル > 管理ツール > コンピュータの管理 > ディスクの管理
製品に接続したHDD 2本が「初期化されてません」となる。

ディスク3,4で右クリック > ディスクの初期化 > GPT > OK > 以下エラーになる。
「指定されたディスクは、サイズがGPTディスクの最小要件未満のため変換できません。」

ディスク3,4で右クリック > ディスクの初期化 > MBR > OK > 以下エラーになる。
「デバイスで重大なハードウェアエラーが発生したため、要求が失敗しました。」

RATOCページ調べるとFWが古いらしい。
http://www.ratocsystems.com/services/driver/case/rsec32u3r_firm.html
FW改善ポイントで
「Advanced Format Technologyを採用したHDDで、4TBを超えるRAID0ボリュームが正しく構築できない不具合を修正しました。」
とあった。
今挿入してるのは3TB x 2本=6TBだし、これに該当するのでは?と思い、FW更新する事にする。

上記ページから以下をダウンロードして実行。
RATOC-RS-EC32-U3R Firmware Updater-020B.exe

製品(HDD入り)をWindows PCに接続した状態でこのツールを実行すると、以下になった。

製品名: RATOC RS-EC32-U3R
ファームウェアバージョン: Ver: 02.03 -> Ver: 02.0B


あとは更新ボタンを押してしばらく待つ。1分ほどで更新完了。
表示されたメッセージ通りに、製品の電源を切ってから再接続してみる。
(FW更新ツールを閉じて、そのまま製品裏面の電源スイッチをOFF -> ON)

すると、コンピュータの管理の画面で、今度は2794.52GBとして2本認識された。
(さっきは容量不明となってた)
この時、製品の動作モードはSINGLEになってる。余計なボリュームを削除し、未割り当てボリュームにする。

以下を参考にRAID0に設定し直す。
https://www.ratocsystems.com/pdffile/case/rsec32u3r_v2.pdf
ユーザーズマニュアル
8 動作モード選択ボタンでのRAID作成

作業手順は以下だが、Windows PCに接続した状態でやってもRAIDモードは変更出来なかった。

動作モード選択ボタンを3秒以上長押し > 全てのモードのLEDが点灯 > 選択ボタンを何回か押して、RAID0のLEDを点灯させる > モード選択ボタンを3秒以上長押し > 動き出す音がするのでそれで長押しを終了した


なので、デバイスの取り外しでSINGLEドライブを切り離してから、USBケーブルを抜いた。(電源はONのまま)
ここから上記手順を行うと、モード選択出来た。
しばらく待ってから、USBケーブルでWindows PCに接続し直すと、何も起きないので、コンピュータの管理から
ディスクの管理の画面を開く。
すると、ディスク3として認識されたドライブの「ディスクの初期化」ウィンドウが自動的に開いた。
2TB以上なのでGPTパーティションを選択し、OKボタン。

これで5589.02GBの未割り当て状態で初期化が完了。

(RAID0モードに設定する前に、SINGLEモードの状態でドライブのパーティション見たら、1本は全てパーティション削除出来て1つの未割り当て状態へ、もう1本は2TBと700MBくらいに分割された状態だった。
この状態からRAID0モードに設定してここまで進んだら5.5TBのRAID0ボリュームになったので、つまりパーティションは残したままでRAID0モードに切り替えても、勝手にパーティションは削除してくれるって事だな。)

この後は、右クリック > 新しいシンプルボリューム > ボリュームラベルは元々のIを選択 > ファイルシステムはexFAT > フォーマット実施

これで3TB x 2本 RAID0のUSB外付ドライブに出来た。

[PC]TB3外付ドライブ自作(調査中)

あけましておめでとうございます。

4TBくらいの個人データを管理してるが、外付USBドライブがフルになってきたので、
増設作業中。
しかし、コピーが遅すぎる。USBってよりはHDDの速度なのかな。

オールフラッシュを検討したいが、10GbEであっても通信ポートがボトルネックになる事は予想できるので、
Thunderbolt3(40Gbps)を使って、外付けドライブ(ストレージ)を自作できないか?と考え中。

しかし、PCIe接続のTB3拡張カードは比較的安く買えるのに、これってホスト側(マスター側)だよな。
ターゲット側(スレーブ側)になるための方法を探してるのだが、唯一見つかったのは
「MAC PCを使ってれば、ターゲットディスクモード(Target Disk Mode)のサポートしててMAC PCを外付けドライブのように扱える」
との事。

しかし、Linuxなどでは方法が見つからず。
4TB分の市販品を買うのは金銭面で現実的でないので、何とか自作したいのだが。。。

[PC]HD-AD4U3分解

Amazonセールで8380円と安かったので買ってみた。
4TB HDDって最安でも8000円以上だなと。
そうなると8380円って事は4TB HDDを最安で買って、かつ数百円でUSB to SATA変換アダプタがついてくるって事だしな。
っと思って買ってみた。

中身をあけてみたら、
Seagate BARRACUDA ST4000DM004
https://www.qoo10.jp/kakaku/646378244/2026318710
だった。

Qoo10だと7,659円で売ってるし、価格.comにおける最安4TBモデルだった。

[CentOS]モニタからプロンプトが外れる

症状

・CentOSをコマンドラインモードで起動すると、下の一行が画面外になってしまう。


対策

・起動時の解像度を変更したらなおった。
https://www.storange.jp/2017/03/centos-7.html

・やりかたは以下。vgaの設定を追記。元々の解像度は1920x1200かな。
vi /etc/default/grub

GRUB_CMDLINE_LINUX="crashkernel=auto ... rhgb quiet vga=795"


795設定 = 1280 x 1024、色深度24

・上記の通り追記したら再起動。これで解像度は下がったが、ずれはなくなった。

[PC]POE+スイッチT1500G-10MPS

AXISカメラM1125を動かしたいけどPOE対応機器が無い。
調べると、やっぱりTP-LINKがコスパ最高と判断。
しかも購入するのはamazon.co.jpでなく、USサイトamazon.comを使うと安い。

TP-LINK T1500G-10MPS
https://www.tp-link.com/jp/business-networking/smart-switch/t1500g-10mps/#specifications

Amazon.comなら送料含めて140US$くらい
https://www.amazon.com/TP-LINK-T1500G-10MPS-Jetstream-Sufficient-Aggregation/dp/B01NAWJMWP/ref=sr_1_1?keywords=t1500g10mps&qid=1576238505&sr=8-1

届いたのでセットアップしてみる。

初期セットアップ

初期アドレスは192.168.0.1なので、LANアダプタを同じネットワークセグメントに設定してからアクセスする。
初期パスワードはadmin/adminでログインできる。
System Info > System Time > 時刻設定
System Info > System IP > 固定IP設定
User Management > adminにチェック > 右の編集ボタン > パスワード変更

[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が返っても意味ないのかも。
カレンダー
12 | 2020/01 | 02
- - - 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コード