vzの尺なblog

〜まだ 1 epoch 目〜

自分でLANコンセントをつけてみた

自宅の1階と2階の間をLANケーブルで結びました。屋根裏から壁を通してケーブル敷設し、壁に穴をあけてLANコンセントをつけました。今回は苦労した事や気を付ける点などのまとめと、使った道具のレビューを兼ねた投稿です。

~いきさつ~
自分の家は立地的に電波の入りが悪いようで、1Fの無線ルータからの電波が2Fに届きません。ルータは3階建てまでOKと銘打ったものなのに・・・。 業者に頼むと標準的な工事で大体3万円ぐらい。敷設する長さや家の構造によるメンテナンス性によっては追加費用がかかる場合があり実際に現場を見てみないと正確な見積もりがだせないとの事。最低でも3万か~、結構高いな~、ということで自分でやることにしました。


必要な道具を揃える

基本的に手持ちのもの以外はAmazonで購入しました。

※そのほかコメント
「ジョイント釣り名人」やビニールテープなどは目立つ色がよいです。屋根裏でヘッドライトで見つけやすいように。蛍光テープなんかもあると便利かもしれません・・・

実際に工事してみる

やってみると確かに家のメンテナンスのしやすさにより全然敷居がかわると思いました。

  • 屋根裏が広く人が入れれば大分楽です。特に高さがないと難しいです。
  • 柱があって場所によっては線を通せない箇所があります。目視できればよいのですがそうでない場合は壁を叩いて音の響き方で検討をつけます。
  • 断熱材が敷いてあってケーブルがなかなか通しにくい。結構びっしりひいてありました。
  • 既にCD管が通っていれば簡単(しかも呼び線も通っていればさらに良し)

基本的にケーブルを通すのは二人でやりました。ケーブルの両端に一人ずつ。
★工事中はブレーカーを落としておきます。


ケーブル敷設:1階の屋根裏~2階の屋根裏

まずは1階の屋根裏と2階の屋根裏の間にLANケーブルを通します。

  • 1Fと2Fの屋根裏に登れるところをさがします。自宅は両方とも押し入れの上にありました。1Fの屋根裏は人が入っていけるスペースはなし。2Fは十分なスペースがありました。
  • まずは2Fの屋根裏に入り電気の配線がどうやって1Fまでいっているか調べます。これを辿れば、1Fのブレーカーまではいけるはず。
  • 一人は2Fの天井裏に入り、電気の配線と同じ場所から「ジョイント釣り名人」を1Fへ落としていきます。この時1F側(引っ張られる側)をジョイント部分のネジがメスになるようにします(後でワイヤーロック金具をつけるため)。「ジョインと釣り名人」が1Fの天井裏まで到達したら、ツンツン叩いて1Fの天井裏でで音をたてます。
  • もう一人は1F天井裏に登り音を頼りにジョイント釣り名人をみつけピックアップします。
  • 1F側で「ジョイント釣り名人」にワイヤーロック金具をつけて、ビニールテープでロック金具にLANケーブルを固定します。すっぽ抜けたら今までの苦労が台無しになるので頑丈に止めます。
  • 2F側から「ジョイント釣り名人」を引き上げます。すると一緒にズルズルズルっとLANケーブルも上がってきます。途中何かに引っかかったら無理に引っ張らず、1F側に引き戻して何回かリトライします。
ケーブル敷設:1Fの屋根裏~ルータ近くの壁

これが一番苦労しました。1F側は屋根裏に人が入っていけるスペースがありせん。屋根裏の入り口から目的のルータ近くの壁まで水平に直線で8mぐらいあります。こういう場合は「ジョイント釣り名人」は不向きです。(ストレッチ性が逆に邪魔、長さもたりない)
いろいろ思案した結果、以下の方法でうまくいきました。

  • 手持ちの振り出し式の投げ竿(敷設用ではなく本当の釣り道具)に重り(8号ぐらい。竿がなるべく曲がらないぐらいの負荷)をつけて、振り出しを収納し短い状態にして1Fの屋根裏入口に登る。
  • 目的の壁までラインを送りながら竿を伸ばしていく
  • 壁までいったらリールをフリーにして糸を垂らしこんで1Fの壁の中の床下まで下ろし、重りでトントン床を叩き音を鳴らす。
  • もう一人は目的の壁付近で音を頼りに場所を特定し、穴をあける箇所にマーキングする。
  • キリやこぎりを使って壁に穴をあける。
  • 穴から釣り糸を手繰り寄せる。
  • 重りを外し、呼び線となる丈夫な紐(雑誌を捨てる時に結う糸を使いました)を釣り糸に結び丈夫に固定する。
  • 屋根裏から釣り糸を巻き上げ、呼び線を引き上げる。
  • 呼び線にLANケーブルを丈夫に固定する。
  • 壁側から呼び線を引っ張りLANケーブルを通していく

※紐の固定はしっかりビニールテープで頑丈に行います。すっぽぬけたら苦労が水の泡です。
※途中で何かに引っかりました。こういう時は一度引き戻して何度かリトライするとうまくいきます。
※釣り糸を落とし込むときは下に引っ張ることができないので、ある程度の重量がある重りを使い下方向に負荷をかけれるようにしておきます。
※擦れるのでPEラインではダメです。ナイロンのラインが適してます。
※上にも下にも動かせない状態に陥ったりしました。まさに釣りでいう根がかかり状態。根掛かりを外す要領でラインにテンションをかけた状態からレールを起こして一気に緩める。で引っ掛かりを外せました。最悪どうにもならなくなったらラインを切って捨て重りにするのも一つの手だと思います。

ケーブル敷設:2Fの屋根裏~2FのHUB付近の壁

2Fは横に柱が通っていて床まで落とし込める場所が見当たりません。電源ケーブルは端っこから床側を這っています。部屋の電灯のON/OFFスイッチが屋根裏から通って壁の中ぐらいの高さについており、中段に1つのタイプのプレートがついてます。そこで、このスイッチを上段に移設し、LANコンセントを下段につけ、上段下段の2口のプレートを付けることにしました。 これなら穴あけなくてよいし簡単です。

  • 電灯のスイッチのカバーをあけて、「ジョイント釣り名人」を屋根裏に向けて差し込んでいきます。
  • もう一人は屋根裏で待ち構えてといて「ジョイント釣り名人」をピックアップしワイヤーロック金具をつけてLANケーブルを固定します。
  • コンセント側から「ジョイント釣り名人」を引っ張りLANケーブルを通していきます。
  • 電灯のスイッチを冶具の中段から下段に移動します。
  • LANコンセントを冶具の下段に釣り付けます。(圧着は1Fと同様)
  • 上段下段の2口用のプレートを取り付けて完成。

※ここで作業ミス!!
コンセントから屋根裏まで「ジョイント釣り名人」2本で足りたで、そのまま作業を続けていたら、屋根裏からピックアップしたときに「ジョインと釣り名人」を壁の中に落としてしまいした。狭い隙間なので救出方法が思い浮かばず、とりあえず残りの3本で作業つづけました。 こうならないように「ジョイント釣り名人」は長めにつないだほうが良さそうです。救出は何か閃いてからやることにします。

LANコンセントからルータまで敷設&テスト

ここまでくればあとは簡単です。必要な長さのケーブルを作ってつなぐだけです。あとは、LANケーブルテスターで確認し、リンクランプやスピードテストなどをして確認して終わりです。


最後に

ケーブルの自作(コネクタ圧着やLANケーブルテストの使い方)は他サイトを参考にしました。ググると写真や動画付きで丁寧に説明されています。
ネズミにかじられないようにCD管を使っといたほうがよかったな~と思います(今更ですが・・・)。あと作業中ブログにアップすることを考えてなかったので写真をとってませんでした。買った道具類も結構満足してます。ケーブル自作キットも安物ですが十分事がたります。ヘッドライトは超お気に入りになりました。「ジョイント釣り名人」を2本ロストしたのは痛かったです。今後も役に立ちそうなので、あとで救出する予定です。うまく救出できたらその時また投稿します。(その時は写真も撮ろう・・・)

-以上ー

jpegのexifを編集(コマンドライン編)


 ネットでjpegファイルを公開するときに気になるのがjpegファイルに付与されているexif情報です。GPS位置情報や時刻情報などは個人の特定に繋がりかねません・・・ 。 exifを編集するGUIの便利なソフトはありますが、大量のjpegファイルを一枚ずつGUIベースのソフトで編集すのは面倒です。そこでコマンドライン一発で不要なexifを削除できないかと試行錯誤したので覚書です。

使用したソフト

jhead

コマンドラインベースのexifエディッタです。主にexif情報の表示や削除をする場合に使い勝手がよいです。

$ sudo apt install jhead

※公式サイトで大抵のOS(Win/Mac/Linux)のビルド済み実行ファイルが配布されてます。

exiftool

こちらもコマンドラインexifエディッタです。jheadと同様にexifの表示や削除ができますが、特にexifの一部の情報を上書きするのに重宝しました。

$ sudo apt install exiftool

※公式サイトで大抵のOS(Win/Mac/Linux)のインストール方法が記載させてます。



不要なexifを削除する(サブフォルダも含めて全て)

 結論から先に言うと以下に落ち着きました。

$ for filename in `find ./ -iname \*.jpg -or -iname \*.jpeg`; do jhead -purejpg -autorot $filename; done


それでは、以下順を追って・・・

① jheadでexif情報を表示する

 まずはsample.jpgのexifを表示させてみます。

$ jhead sample.jpg 
File name    : sample.jpg
File size    : 54821 bytes
File date    : 2018:09:20 19:45:15
Camera make  : Apple
Camera model : iPhone 6s
Date/Time    : 2018:09:18 10:07:17
Resolution   : 403 x 302
Orientation  : rotate 90
Flash used   : No
Focal length :  4.2mm  (35mm equivalent: 29mm)
Exposure time: 0.0029 s  (1/349)
Aperture     : f/2.2
ISO equiv.   : 25
Whitebalance : Auto
Metering Mode: pattern
Exposure     : program (auto)
GPS Latitude : N 35d 40m 16.5108s
GPS Longitude: E 139d 45m 53.982s
GPS Altitude :  2.29m
JPEG Quality : 95 

いろいろ付与されてます。GPS情報ものっています。ちなみに、-v オプションで更に詳細な情報が表示されます。

② jheadで不要なexifを削除する
$ jhead -purejpg sample.jpg 
Modified: sample.jpg  

$ jhead sample.jpg 
File name    : sample.jpg
File size    : 43797 bytes
File date    : 2018:09:20 19:45:15
Resolution   : 403 x 302
JPEG Quality : 95 

 大分スッキリしました。GPS情報も削除されています。しかし、これだけだと画像によっては縦横の表示が逆になってしまいます。これは、exifの Orientationタグ(画像の回転情報)が消されたためです。
※「 Orientation : rotate 90」が消されたので90度回転しない画像が表示される。

sample.jpgの元画像
「jhead -purejpg」後の画像
元ファイル purejpgのみ


③ Orientationタグの回転情報を画像自体に反映させる

 jheadにオプション -autorot を指定すると上記のOrientationタグを元に、画像自体に回転させて、なおかつタグを消してくれます。

$ jhead -autorot sample.jpg 
Modified: sample.jpg  
$ jhead sample.jpg 
File name    : sample.jpg
File size    : 53362 bytes
File date    : 2018:09:20 19:45:15
Camera make  : Apple
Camera model : iPhone 6s
Date/Time    : 2018:09:18 10:07:17
Resolution   : 288 x 403
Flash used   : No
Focal length :  4.2mm  (35mm equivalent: 29mm)
Exposure time: 0.0029 s  (1/349)
Aperture     : f/2.2
ISO equiv.   : 25
Whitebalance : Auto
Metering Mode: pattern
Exposure     : program (auto)
GPS Latitude : N 35d 40m 16.5108s
GPS Longitude: E 139d 45m 53.982s
GPS Altitude :  2.29m

Orientationタグが消えています。表示も以下のように正常です。(縦横があってる)

sample.jpgの元画像
「jhead -autorot」後の画像
元ファイル autorotのみ


④ 上記②③を組み合わせて

$ jhead -purejpg -autorot sample.jpg 
Modified: sample.jpg  
$ jhead sample.jpg 
File name    : sample.jpg
File size    : 42973 bytes
File date    : 2018:09:20 19:45:15
Resolution   : 288 x 403
JPEG Quality : 95

これで意図した通りに不要なexifが削除できました。


⑤ サブフォルダすべてのjpegファイルに適用する

 bashとfindを合わせて以下で目的達成です。なんかもっと簡単な方法があるような・・・

$ for filename in `find ./ -iname \*.jpg -or -iname \*.jpeg`
> do
> jhead -purejpg -autorot $filename
> done



exif情報を元にファイル名を撮影日時に変える

 jpegのファイル名をexif情報の撮影日時に変更する方法も便利そうなのでメモ。写真を整理したりするのに役に立ちそうなきがすので・・・

jheadの -nf オプションでファイル名を撮影日時にできます。フォーマット文字列は公式サイトに記載があります。

$ jhead -nf%Y%m%d-%H%M%S sample.jpg
sample.jpg --> 20180918-100717.jpg

フォルダ以下すべて変えるにはbashとfindを組み合わせて上記と同様に実行。

変更前

$ tree
.
├── IMG_3561.JPG
├── inu1
│   ├── IMG_2985.JPG
│   ├── IMG_2988.jpeg
│   └── IMG_3241.JPG
├── inu2
│   ├── IMG_3305.JPEG
│   └── IMG_3502.JPG
└── sample.jpg
2 directories, 7 files

ファイル名を変更

$ for filename in `find ./ -iname \*.jpg -or -iname \*.jpeg`
> do
> jhead -nf%Y%m%d-%H%M%S $filename
> done

変更後

$ tree
.
├── 20180918-100717.jpg
├── 20180918-100717a.jpg
├── inu1
│   ├── 20170101-093647.jpg
│   ├── 20170101-095133.jpg
│   └── 20180701-182534.jpg
└── inu2
    ├── 20180721-183656.jpg
    └── 20180908-172942.jpg
2 directories, 7 files



exif情報を書き換える

 exif情報を書き換えるにはexiftoolが便利です。以下、例としてGPS位置情報を変更します。またGPS情報は「GpsPrune 」というGUIソフト(ubuntu package に登録されてる)を使い地図上にマッピングして確認しました。

① exiftoolで目的のexifタグの目星をつける

 まずはsample.jpgのexifを表示させて目的のタグの目星をつけます。-vオプションでの階層構造も表示できます。

$ exiftool -v sample.jpg
  ExifToolVersion = 10.80
  FileName = sample.jpg
 〜中略〜
  | 10) GPSInfo (SubDirectory) -->
  | + [GPS directory with 15 entries]
  | | 0)  GPSLatitudeRef = N
  | | 1)  GPSLatitude = 35 33 0.6 (35/1 33/1 3/5)
  | | 2)  GPSLongitudeRef = E
  | | 3)  GPSLongitude = 139 47 10.1 (139/1 47/1 101/10)
 〜以下略〜

いっぱい表示されます。今回はGPSの緯度経度なので上記の抜粋部分が該当します。これで、北緯:35 33 0.6 / 東経:139 47 10.1(羽田空港)です。

② exiftoolでタグを変更する

 羽田空港から新千歳空港(北緯:42 47 34. / 東経:141 40 10.3に変更します。

$ exiftool -GPSLatitudeRef=N -GPSLatitude="42 47 34.4" -GPSLongitudeRef=E -GPSLongitude="141 40 10.3" sample.jpg

$ exiftool -v sample.jpg | grep GPS
  | 10) GPSInfo (SubDirectory) -->
  | + [GPS directory with 15 entries]
  | | 0)  GPSLatitudeRef = N
  | | 1)  GPSLatitude = 42 47 34.4 (42/1 47/1 172/5)
  | | 2)  GPSLongitudeRef = E
  | | 3)  GPSLongitude = 141 40 10.3 (141/1 40/1 103/10)
 〜以下略〜

変わりました。GpsPruneで位置情報を地図上にマッピングすると意図した結果が得られます。

変更前(羽田空港
変更後(新千歳空港
GPS変更前 GPS変更後



環境

試した環境は以下の通りです。
- Ubuntu 18.04 LTS
- jhead v3.00
- exiftool Version 11.10
- GpsPrune バージョン:18.6

自作GPUマシンのパーツ購入

『手元にGPUマシンを』~シリーズ第2回~

今回は自作GPUマシンのパーツ集めです。


前回までのあらすじ


パーツ購入

手持ちの使えそうなものは、ミドルタワーケース&電源、SATASSD(512GB)、Geforce GTX750、USB3.1の外付けHDD(2TB) ぐらいでしたので、以下を追加で購入しました。


  • GPU
    肝心なGPUですが、相場をみながら後で買おうと思います。とりあえずは手持ちのGTX750で・・・

セットアップ

とりあえず組み立ててOSをインストールしました。

  • M.2 SSDにはUbuntu18.04をインストール
    メインで使うほうです。とりあえずnVidiaのドライバもインストールしました。
    ググってみると、なんとUbuntu18.04からCUDAドライバのインストールがすごい楽になってるじゃないですか!
#デバイスを表示
$ sudo ubuntu-drivers devices
#インストール
$ sudo ubuntu-drivers autoinstall
#再起動
$ sudo reboot
# 確認
$ nvidia-smi

以前はすごいハマって何回もやり直して半分トラウマでした。
あとフレームワークは公式のDockerイメージを使おうと思うのでDockerの環境も整備しておきます。


とりあえず完成

UbuntuもWinも正常に起動できて今の所問題なくうごいてます。Winでベンチマークとるとまあ~大体こんなもんかな的な数値でした。


【これまでにかかった費用(パーツ代のみ計上)】

~<今回購入分詳細> ~

  • ざっくり7万円ぐらい。なにげにM.2SSDが新品な分、一番コストがかかってます・・・
  • 合計: 7万円


~<シリーズ通した全体>~

  • 今回分 : 7万円
  • 合計  : 7万円



後は肝心なGPUですね~

-続くー

GPUマシンの購入を検討してみた

GPUマシンを』~シリーズ第1回~

ということで第1回目の投稿です。
まずは手っ取り早く購入を検討します。
さてどうなるか。よ~く考えよう~。お金はないですよ~。

背景

今まで初期コスト0で始められるクラウドGPUインスタンスを使用していました。しかし開発中はコーディング/デバック/休憩/ご飯/犬の散歩/雑用etcで何かとアイドル時間が長く、インスタンス上で開発するのはコスト的に効率が悪いという結論に至りました(まあ初めから分っていた事ですが)。こまめにインスタントを起動/終了して節約するのも悪くないですが何しろ面倒くさいです。なので今後は手元にGPUマシンを置き、時間課金を気にすることなく開発/デバック/犬の散歩を行い、GPUパワーが必要な時は割安な(GCPのプリエンプティブインスタンスAWSのスポットインスタンス)でトレーニングを行うというスタイルで行きたいと思います。これはそのための環境構築作業を記録したシリーズ投稿です。

※ちなみにGPUのIaaSとして特徴的で割安なサービスを『GPUEater』が提供してます。ここのインスタンスは起動しっぱなし型(インスタント停止しても課金される。削除すると課金されない。またネットワークトラフィック課金等がない。)です。24時間365日の運用で比べると大手より大分割安です。特にAMDGPUインスタンスがあるのが特徴的です。公式サイトにあるように低予算で推論サービスが運用できそう・・・

購入候補

欲をいうと青天井なので、NVIDIAのコンシューマ向けのGPU(GerForceシリーズ)が対象です。また、電気代や騒音を考えて、GPU1枚構成で考えています。GPUメモリはコンシューマ向けだと11GBがMAXなのでこれは必須条件です。GPUメモリ不足だと計算時間の問題ではなく計算自体ができません。また注目のtensorコア搭載のものが欲しいです。そうなると現時点では 『NVIDIA TITAN V』しかありません。 大体のフレームワークがCUDAを前提としてるので基本的にNVIDIA一択ですが、AMDのROCm/MIOpenを使うことでAMD社製GPU上にCUDA互換環境を構築できるのでコスパはよさそうです。が、tensorコアはやっぱり魅力的です。


候補1 PC工房

自分はよくここでPC買います。PC工房にもディープラーニングマシンが他社と比べると大分リーズナブルにラインナップされています。

PC工房 - NVIDIA TITAN V 搭載パソコン ラインナップ

TITAN V 1つ搭載した一番安いやつで、699,980円(税別) ~ 
Core i9-7900X /インテル X299 Express [ASUS X299-A]
32GB(8GB×4) 240GB
Serial-ATA SSD 1TB Serial-ATA HDD DVDスーパーマルチ
TITAN V x1
ミドルタワー / ATX 700W 80PLUS BRONZE認証 ATX電源


候補2 アプライド

エントリーモデルで 1,098,000円(税別)~
BTOパソコンのアプライドHPC&BTO
Core i9 7900X / 64GB DDR4-2666
SSD 500GB / HDD 2T
NVIDIA TITAN V x 1


候 補3 その他

いろいろあるけどどれも高い。 PCというかワークステーションとかの名前でラックマウント式のものが各社からでてますが100万単位の費用がかかります。とても手に出せない・・・
あとディープラーニング向けとして売られていいるものより、ゲーミングPCとかで売りだされているものの方が、同スペックでも相場的に安そうな印象です。でもよくみると電源とかマザボとかSSDとかがディープラーニング向けのほうが良いものを使ってたりします。購入する際は詳細スペックまでよくチェックしたほうがよさそう・・・


結論

各社、OSやフレームワークなどをプリインストールして販売しており購入すればすぐ使えそう、またサポート体制もよさそうです。が、やっぱり高いです。とても手が出せそうにありません。かろうじてPC工房の一番安いやつで迷ったけど・・・。
結局、自作することにしました。GPUメモリさえあれば型落のGPUでもとりあえず実行はできるし、今後の相場(ヤフオクとかで中古)をみながらアップグレード等も柔軟に行えるので。

かつてPCが高価だった時代(自作PCが流行っていた時代)に自作した経験はありますが、まさか今頃になってまた自作するとは思ってもみませんでした。ということで20年ぶりぐらいに自作PCを行います。

-続く-