2020年9月18日金曜日

DGX関連備忘録

(1)Ubuntu関連

・OSのバージョン確認

>cat /etc/os-release

・アップグレード

Ubuntuのアップグレードのやり方

ubuntu 18.04 LTS にアップグレードする(コマンドライン編)


(2)NVIDIA関連

DGX Desktop upgrade

Minor Update(同じMajor release間:3.1.6→3.1.7など)

Major Update(異なるMajor release間:3→4など)

・ドライババージョン確認

>cat /proc/driver/nvidia/version

*NVRMとGCCのバージョンが表示される

・CUDAのpath

/usr/local/cuda/

・CUDA(nvccコンパイラ)バージョン確認

>nvcc -V

*表示結果は右記:Cuda compilation tools, release ?.?, V?.?.?

・cuDNNライブラリ本体の場所

/usr/lib/x86_64-linux-gnu/

・cuDNNのバージョン確認(?.?.?)

>cat /usr/include/cudnn.h | grep CUDNN_MAJOR

>cat /usr/include/cudnn.h | grep CUDNN_MINOR

>cat /usr/include/cudnn.h | grep CUDNN_PATCHLEVEL

・GPU構成

>nvidia-smi

#またはToolkitサンプルコード(カテゴリ:1_Utilities)の"deviceQuery"を使用

・その他

 ・GPU関連でよく使うコマンドまとめ


(3)Python関連

・python3.6のインストール

*注意:Ubuntu 16.10以降と以前で方法が異なる

*参考

Installing Python 3 on Linux

How to Install Python 3.6.1 in Ubuntu 16.04 LTS


(4)Tensorflow関連

・バージョンによってはpythonのvirtualenv下でのインストールを推奨

pipでのインストール

*参考

テスト済みのビルド構成バージョン互換性情報あり

Python 3.7 + TensorFlow 2.1 + Keras 2.3.1 + YOLOv3 最新バージョンで物体検出


(5)Docker関連

別まとめ


(6)リモート(win10など)からのファイルのやりとり

・リモートから転送

>scp <リモートでのファイル名> <ユーザ名@IPアドレス:(フルパスでファイル名)>

・リモートへ転送

>scp <ユーザ名@IPアドレス:(フルパスでファイル名)> <リモートでのファイル名>


(7)リモートデスクトップ

Ubuntu 16.04

 ・Windows10からUbuntu16.04へリモートデスクトップ接続する設定

 ・Windows10とUbuntu16.04をリモートデスクトップ接続で行き来する

・Ubuntu 18.04

*注意:windowsのリモートデスクトップは使えないのでTightVNCで代替

 ・Windows10もしくはMacOSからUbuntu 18.04 LTSにリモート接続(リモートデスクトップ)してみた


*複数ユーザ?


(8)その他

Linuxでファイルコピー時に進捗状況を確認する6つの方法






Docker関連まとめ

(0)コンテナと(コンテナ)イメージ

・コンテナ=仮想環境での実行プロセス

・(コンテナ)イメージ=コンテナのスナップショット

*仮想環境での作業結果を環境ごと残しておける

*コンテナ内外のファイルのやりとりも可能(5を参照)


(1)コンテナイメージをウェブサイト(ハブ)等からPULL(ダウンロード)

>docker pull <レポジトリ>


(2)ローカルに保存されたコンテナイメージを確認

>docker images

*参考:Dockerのイメージファイルの格納場所


(3)コンテナの作成と起動

・通常

>docker run -it <イメージID>

・GPU使用(ver.19.03より)

>docker run -it --gpus all <レポジトリまたはイメージID>


*注意:<イメージID>はいつも最後に(オプションの前ではダメ)

*注意:gpusオプションの前は2つの"-"が必要

*gpuのID指定方法は不明(特定のIDのものだけできる?)

*同じイメージから複数のコンテナを起動でき、名前をつけて区別可能

>docker run -it --name <コンテナ名1> --gpu all < イメージ ID>

>docker run -it --name <コンテナ名2> --gpu all < イメージ ID>


(4)コンテナの状況確認

・稼働中のコンテナのみ

>docker ps

・停止中の(過去に稼働した)コンテナを含む

>docker ps -a


(5)コンテナ内外間のファイルコピー

>docker cp (コンテナ外のファイル名) (コンテナID):(コンテナ内のファイル名:フルパス)

>docker cp (コンテナID):(コンテナ内のファイル名:フルパス) (コンテナ外のファイル名)

*注意:コンテナ外でのコマンド


(6)コンテナの停止

>docker stop <コンテナID or コンテナ名>


(7)コンテナからイメージを作成

>docker commit <コンテナID> <レポジトリ名(ユーザ名など)>:<イメージ名(TAG)>

*注意:レポジトリ名とイメージ名の間の「:」


(8)コンテナ(イメージ)の削除

・コンテナの削除

>docker rm <コンテナID>

・イメージの削除

>docker rmi <イメージID>


(9)ヘルプ

・全体ヘルプ

>docker (--help)

・実行ヘルプ

>docker run --help


(10)その他

*参考

Install Docker Engine

NVIDIA/CUDAのハブ

 ・Overview(リスト)Tags

dockerのコマンド run/create/startの違いについて

 ・start:1つまたは複数のコンテナを起動する

 ・run:新しいコンテナを実行する命令

root以外のユーザーにDockerコマンドの実行を許可

Dockerコンテナの作成、起動〜停止まで

【Linux】タイムゾーン(Timezone)の変更

Dockerの作業済みコンテナからイメージを作って移植を楽にする



2020年9月17日木曜日

voxelmorph関連まとめ

 (1)コード関係

・GitHub:voxelmorph/voxelmorph

*注意:tensorflow版はlegacyとして入手可能

*参考:最新版はPytorchへ移植中(同URLから入手可)


(2)稼働を確認できた環境

・Ubuntu16.04LS

・CUDA9/CuDNN7

・python2.7/3.6

・仮想環境(virtualenv)下でのtensorflow_gpu1.12.0 + keras2.2.4

*上記をdockerイメージとして保存済み

*OSおよびCUDA関連はnvidiaの提供する以下のdockerイメージを利用

nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

*virtualenvの必要性は本ページ末尾の参考事項を参照


(3)環境構築手順(voxelmorph実行時には不要

1)dockerイメージ(9.0-cudnn7-devel-ubuntu16.04)をPULLしてコンテナを起動

*起動時に要gpuオプション

*例:>docker run -it --gpus all <image ID>

*gpuオプションがなくても”nvcc -V”はできるが"nvidia-smi"はできない

2)基本ツールの更新とインストール

*vimなどの基本ツール

3)python関係のインストール

*2.7と3.6の環境を両方(pip, pip3を含む)

*Ubuntu16.04に3.6をインストールするので対話的な作業(基本的にすべてy(es)かENTER入力)

4)pythonの仮想環境(virtualenv)をインストールし、アクティベート

*virtualenvの必要性は本ページ末尾の参考事項を参照

5)仮想環境下でtensorflow, kerasなどをインストール

*手順:2〜5はスクリプト化済

6)voxelmorphをインストール

*コンテナ外からtarファイルをコピーして展開

7)イメージを保存

現状はイメージ名:voxelmorph-legacy-20200917が最新


(4)voxelmorph実行手順

0)GPUサーバへのリモート接続

TightVNCを使う

*SSHを使う

 > ssh <ユーザ名>@<GPUサーバのIPアドレス>

1)docker imageの確認

>docker images

*これで表示されるvoxelmorph-legacy-20200917イメージIDを確認しコピーしておく

2)dockerコンテナの起動

>docker run -it --gpus all <voxelmorph-legacy-20200917のイメージID>

3)pythonの仮想環境をアクティベート

*下記のコマンドでシェルスクリプトにより行う

>source activate_venv.sh

*シェルスクリプト内で使用するGPUのIDを環境変数の設定で指定している

>export MY_GPU_ID=1

4)作業ディレクトリ(ソース)に移動

>cd ./venv/voxelmorph-legacy/src/

5)コードの改変および学習/テスト/レジストレーションの実行など

*下記のスクリプト内にGitHubでのインストラクションの記述やこれに基づく実行時のディレクトリ指定などのコマンド等が書かれている

学習:source train.sh

テスト:source test.sh

レジストレーション:source register.sh

6)作業結果を含めた環境の保存

>docker commit <コンテナID> <レポジトリ名(ユーザ名など)>:<イメージ名(TAG)>

*「:」に注意

*注意:既存のイメージに上書きしないこと

*イメージはOSやGPU関係の環境を丸ごと保存するため5G超のサイズとなることに注意

*Docker関連のまとめも参照

7)実行結果ファイルをコンテナ外へ取り出す(コピーする)

*注意:コンテナ外から行うこと

>docker cp (コンテナID):(コンテナ内のファイル名:フルパス) (コンテナ外のファイル名)

8)dockerのコンテナ(作業環境)から抜ける

(dockerのコンテナ内のコマンドプロンプト)# exit


参考事項:

・virtualenvを使用しないと以下のエラーが出る

Traceback (most recent call last):
  File "register.py", line 24, in <module>
    import networks, losses
  File "/voxelmorph-legacy/src/networks.py", line 52
    src = Input(shape=[*vol_size, src_feats])
                                 ^
SyntaxError: invalid syntax





2020年8月11日火曜日

Microsoft Teams時々Zoomの備忘録(7)自分の画像をピン留め(できない)

・「医用生体画像計測(13)その他のイメージング」のオンライン講義で超音波画像診断装置からの映像をTeamsで配信

・装置からの映像は、ビデオアダプタI•O DATAのGV-HUVC(HDMI経由)でTeamsに入力され、アダプタがWebカメラと同様に認識される(=カメラのリストから選択が可能)

・映像を受講者全員に見せるには、自分のカメラ画像をピン留めする必要があるのだが、自分(会議の開催者)ではできないらしい

・受講生からのアドバイスで、受講生全員に「先生の画像をピン留して」とお願いすることになったが、これでは講義動画には非常に小さくサムネイル程度でしか記録されない

・他のソフトでWebカメラを選択して映像を表示できるソフトがあれば、それを画面共有することで解決できるが講義中には見つけられなかった → 調べた結果が以下

 ・Windows10では「カメラ」アプリ

 ・Macでは「QuickTime」で「ムービー収録」

2020年5月8日金曜日

Microsoft Teams時々Zoomの備忘録(6)Mac OS X環境においてシステム音とマイク入力をMIXしてMicrosoft Teamsで配信する方法(修正あり)

(モニター方法について修正あり:5/9)

・WebブラウザやMicrosoft PowerPointなどシステムに音声を出力するソフトを使用しながらマイクで解説するような状況(オンライン講義など)を想定
・発端はこちら
・試行錯誤の末、できることを確認

◎使用するもの

Soundflower(2つの系統を両方使用)
LadioCast

※モニター用にSoundflowerbedは使用しない(後述)
BlackHoleは1系統のみしか使用できないため単独ではSoundflowerを代替できない

○各要素間の接続はこんな感じ

・仮想デバイスが2系統あるSoundflowerの一方をシステム出力に、もう一方を
 LadioCastの最終出力用に使用
・LadioCastではシステム出力とマイク入力をmixしてSoundflowerに出力する
 と同時にモニター用に内蔵出力(ヘッドフォン推奨)にも出力
・以下はシステム出力にSoundflower 64ch、最終出力用に同2chを使用する例
 (逆でもOK)

 ※PowerPointとLadioCastの間の「…」は接続の意味でなく他のアプリケーション
 ※遅延に関しては後述(その他のメモ)を参照
 ※Mac OS Xのサウンド入出力のまとめはこちら
 
○以下が具体的な設定方法

・システム環境設定におけるサウンド出力(Soundflower 64ch)
 ※アプリケーション側にもよるが出力レベルは大きめに設定

・システム環境設定におけるサウンド入力(内蔵マイク)

・LadioCastの設定
 ・入力1:Soundflower (2ch)
 ・入力2:内蔵マイク
 ・出力 メイン:Soundflower (64ch)
 ・出力 Aux1:内蔵出力
 ※各入力において出力先が2つ(メインとAux1)指定されていること(赤字)に注意

・Microsoft Teamsのデバイス設定
 ・スピーカー:Built-in Output
 ・マイク:Soundflower (64ch)


●その他のメモ

・上記の設定でモニター音に若干の遅れがある(喋るのが困難なほどではない)
 ・指パッチンなどで確認可能
 ・遅延の原因は、TeamsとLadioCastのどちらか一方というより、このセットアップ
  の特性と考える

・LadioCastの出力を単独(Soundflowerのみ)にして以下の方法でモニターする方法も
 あるが推奨は上記
 (1)Soundflowerbedでモニターする
  ・以下の理由により非推奨
   ・最終出力がSoundflower (64ch)の場合、時々不快な高音ノイズが混じる
   ・最終出力がSoundflower (2ch)の場合、無視できない遅延が生じる=自分の遅れた
    声を聴きながら喋るのは困難
 2)Microsoft Teamsの出力のみでモニターする(これはできないことが判明)
  ・Teamsの出力(スピーカー)をBuilt-in Outputのまま、LadioCastで出力 Aux1を
   N/Aにすると聞こえない
   ・両者をBuilt-in Output(内蔵出力)として、一方でボリューム調整をすると
    音量が変化するが、他方はスライダが動かない(当然と言えば当然)
   ・Built-in Output(内蔵出力)は複数からアクセスした場合、コントロールが
    統一される模様
  ・若干の遅れがある(喋るのが困難なほどではない)

・使用する2系統のうち一つをSoundflowerのどちらか、もう一方をBlackHoleとしても
 同様にできる
 ・インストールするソフトを最少にするならSoundflowerとLadioCastでよい

・できなくはないが面倒なのでWindows版と同じように実装してほしい(感想)

・ネット上の「何もしないでもできる」という報告が謎。OSのバージョンやハードウェアの違いかも。


2020年5月5日火曜日

Microsoft Teams時々Zoomの備忘録(5)Mac OS Xのサウンド入出力関係まとめ(修正あり)

(修正:5/8)

(1)での実験やその続きのための整理

・多くのアプリケーションのサウンド入出力(システムが制御)はこんな感じ
 ・入出力とも1系統のみ選択可能
 ・内蔵スピーカーとヘッドフォンは同一系統(ジャックの抜差で自動変更)

・一部のアプリケーションは入出力がシステムと独立
 ・使用できる系統も様々

 ・Web会議ソフト(Zoomなど:左上)、Garageband(右上)、
  QuickTime Player(左下)、LadioCast(右下)
 ・QuickTime Playerは入力のみの制御
 ・LadioCastは4系統までのmix/sprit機能あり

・サウンド入出力の仮想デバイスはこんな感じ
 ・Soundflower(フリー), BlackHole(フリー), Loopback(有償)
 ・Soundflowerは2系統(「2ch」,「64ch」と呼称)を使用可能
 ・Loopbackは64系統まで
 ・「ボイスメモ」はSoundflowerの64chとBlackholeでは作動しなかった

(1)での実験で試した3つの設定はこんな感じ
 ・設定1では内蔵スピーカーからの音を内蔵マイクで拾っていた模様
 ・設定2で成功のはずだったが失敗
  ・成功すればLadiocastでマイク音をmixする予定だった
 ・設定3は設定2と本質的に変わらないが試行してみたものの失敗
  ・Soundflowerの設定や好不調がよくわからないため

2020年4月24日金曜日

Microsoft Teams時々Zoomの備忘録(4)その他のメモ(随時更新)

○各種設定および操作の詳細

・ゲストの招待
 ・会議開始後のユーザーパネルでユーザー名入力テキストボックスの右にある
  リンクボタンでClipboardにコピーされる
 ・Mailでの送信時、メッセージをリッチテキスト形式(フォーマットメニュー
  より変更可)にしてペーストする必要がある

・Teamsのチャネルのプライバシーは作成時のみ設定可能
 ・プライベート チャネルを標準チャネルに変換することはできない

・マルチログインに関して
 ・マルチログイン=ゲストでなく正規のアカウントで2つ以上の端末からログイン
 ・Zoomは古い方が強制ログアウト
 ・Teamsはマルチログインが可能(2020年4月現在)
  ・2つまでしか試していない

・Teamsの会議のチャット発言の削除
 ・自分の発言は自由に削除・編集できる

・Teamsの会議の強制終了
 ・運営者の退出後の会議乗っ取り防止
 ・公式ツイート
 ・ツールバーの「…」メニュー(その他の操作)から「会議を終了」で全ユーザー
  が強制終了(ツールバーの赤い受話器ボタンは使わない)


○役立つ情報

・受講者側の視点
 ・大学院のオンライン授業を1週間受けてみて気づいた課題(Togetter)
 ・東大・経済・山本先生によるアンケートより(Twitter)
 ・ハンズオン要素のある場合のオンライン授業のデメリット(Togetter)
 ・電子レンジに注意(ELECOM)

・改正著作権法(前倒し)
 ・遠隔授業で教科書利用可能に 改正著作権法、28日施行(NIKKEI)
 ・改正著作権法 35 条の施行に関する高等教育関係者向け説明資料(国立大学協会)
 ・改正著作権法第35条運用指針(著作物の教育利用に関する関係者フォーラム)

・大学等遠隔授業に関する取組状況共有サイバーシンポジウム(国立情報学研究所)
 ・動画資料(@YouTube)などのアーカイブあり