2022年度10月研究プロジェクト

期間: 2022/10/27 - 2022/11/24

課題

以下の中から選んでください。

  1. PyTorchチュートリアルを試して好きな物を一つ選び、その技術に関連する論文を調査して発表資料をまとめる
  2. PyTorchチュートリアルを試して好きな物を一つ選び、プログラムを改造して面白いことをする
  3. [Advanced] 研究室の自律移動ロボットLIMOの実機またはシミュレータを動かし、面白いことをする
  4. その他何でも

最後にハイブリッド発表会で発表する。

※他の人と協力してやっても良い。

スケジュール

  • 11/4 (Fri.)   何をやることにしたかをslackで報告
  • 11/11 (Fri.)   slackで進捗報告(この日までに課題が50%できていることを目指す)
  • 11/18 (Fri.)   slackで進捗報告(この日までに発表準備に着手すること)
  • 11/2?   ハイブリッド発表会

PyTorchとは

Pythonで動くDeep Learningフレームワーク。学術研究では世界で最も多く使われているフレームワーク(だと思う)。

インストール

PyTorchのインストール方法はこちら

オススメはAnacondaで入れたPython 3を使うこと。Anacondaのインストール方法はこちら

※AnacondaのPythonを使えば、root権限のない共用計算機でも好きなライブラリをインストールして使える!
(sudoをつけずに、普通に$ pip install <パッケージ名>でOK)

チュートリアル

PyTorch本家ページのTutorialsリンクに行くととてもたくさんある。分かりやすいのはこの辺↓

IPython Notebookを使っても良いが、 「View on GitHub」リンクに飛んでサンプルコードをブラウザで表示し、コード右上の「Raw」をクリックして全選択->コピペで自分のコード(.py)を作って実行しても良い。

自律移動ロボットLIMOとは

  • マニュアルはこちら
  • Username:agilex
  • Password:agx
  • USBハブはLIMOの側面の装甲を開いたらあった。

コマンドラインからwifiに繋ぐ方法

参考ページ

$ nmcli device wifi list
$ sudo nmcli device wifi connect aklab-wifi-5G password [パスワード] ifname wlan0

キーボード操作

ターミナルを開いて

$ source /home/agilex/agilex_ws/devel/setup.sh
$ roslaunch limo_base limo_base.launch

別のターミナルを開いて

$ source /home/agilex/agilex_ws/devel/setup.sh
$ roslaunch limo_bringup limo_teletop_keyboard.launch

かなり速いので速度を落としてから動かしたほうが良い。

シミュレータでLIMOを動かす

GitHubレポジトリをクローンしてくる。

$ git clone https://github.com/agilexrobotics/ugv_gazebo_sim
$ cd ugv_gazebo_sim

あとはこちらのドキュメントに従って動かす。

どのパソコンでやってもOK。ただし、Ubuntu 18.04で、ROS Melodic desktop fullをインストールしている必要がある。

ROS Melodic desktop fullのインストール方法はこちら

金崎研の共用計算機の使い方

VPNの接続

研究室のネットワークにVPN接続をしてください。

  • IPアドレス: 131.112.16.136
  • VPNの種類: L2TP
  • 認証アルゴリズム: HMAC-SHA
  • 暗号アルゴリズム: AES-CBC

ユーザ名・パスワードはslackで。

※MacでVPNを使うために「サービス順序の設定」をする必要があります。参考ページ

マシン一覧

GPUの載ったマシン一覧がこちら。

Name OS GPU GPU number
slime Ubuntu 20.04 Geforce GTX Titan X 3
drakee Ubuntu 18.04 Quadro P6000 3
wyvern Ubuntu 20.04 Quadro P6000 3
golem Ubuntu 20.04 GTX1080 4
troll Ubuntu 20.04 RTX A6000 1
mimic Ubuntu 22.04 Quadro P6000 1

kanriというログインノードにSSH接続して使ってください。("-Y"オプションをつけるとX11転送ができて画像を表示したりできます。)

  $ ssh -Y <your name>@kanri

ユーザ名はメールアドレスの.を-(ハイフン)に変更したものです。
※デフォルトのパスワードはユーザ名と同じにしてあるので、kanriにログインした後、passwdコマンドで変更してください。

  $ passwd 

計算ノード(GPU計算機)使用方法

バッチジョブ

ジョブスクリプトサンプル

#!/bin/bash
#AKBATCH -r any_1
#SBATCH -N 1
#SBATCH -J job_name
#SBATCH -o slurm-%J.out

python CNN.py

説明↓

#!/bin/bash
#AKBATCH -r any_1 ←{ノード名 or any}_{GPU数}。ak-rms`コマンドを実行して詳細を確認できます(anyはどこでもいいから確保です)
#SBATCH -N 1 ←ノード数。今回は1ノードのみなので変更しないでください
#SBATCH -J job_name ←ジョブ名
#SBATCH -o slurm-%J.out ←出力ファイル名
以降実行したいコマンド(いくつでもOKです)
python CNN.py
リソース名について

#AKBATCH -rで指定します。リソース名一覧はak-rmsコマンドで確認できます。

Resource Name System (ak-rms)

- Available resources
+-------------------+--------------+-------------+-------------+----------------------------------+-------+
|     resource_name |    partition | CPU threads | Host memory |                              GPU | nGPUs |
+-------------------+--------------+-------------+-------------+----------------------------------+-------+
|             any_1 |          any |           4 |       20 GB | slime_1/drakee_1/wyvern_1/golem_1 |     1 |
|             any_2 |          any |           8 |       40 GB | slime_2/drakee_2/wyvern_2/golem_2 |     2 |
|             any_3 |          any |          12 |       60 GB | slime_3/drakee_3/wyvern_3/golem_3 |     3 |
|           slime_1 |        slime |           4 |       20 GB |              Geforce GTX Titan X |     1 |
|           slime_2 |        slime |           8 |       40 GB |              Geforce GTX Titan X |     2 |
|           slime_3 |        slime |          12 |       60 GB |              Geforce GTX Titan X |     3 |
|          drakee_1 |       drakee |           4 |       20 GB |                     Quadro P6000 |     1 |
|          drakee_2 |       drakee |           8 |       40 GB |                     Quadro P6000 |     2 |
|          drakee_3 |       drakee |          12 |       60 GB |                     Quadro P6000 |     3 |
|          wyvern_1 |       wyvern |           4 |       20 GB |                     Quadro P6000 |     1 |
|          wyvern_2 |       wyvern |           8 |       40 GB |                     Quadro P6000 |     2 |
|          wyvern_3 |       wyvern |          12 |       60 GB |                     Quadro P6000 |     3 |
|           golem_1 |        golem |           4 |       15 GB |                          GTX1080 |     1 |
|           golem_2 |        golem |           8 |       30 GB |                          GTX1080 |     2 |
|           golem_3 |        golem |          12 |       45 GB |                          GTX1080 |     3 |
|           golem_4 |        golem |          16 |       60 GB |                          GTX1080 |     4 |
+-------------------+--------------+-------------+-------------+----------------------------------+-------+
バッチジョブの投入
$ akbatch job.sh

インタラクティブジョブ

$ akrun any_1

説明↓

$ akrun {ノード名 or any}_{GPU数}

ノードの空き状況確認

$ sinfo

キューにたまっているジョブ一覧

$ squeue

注意点

  • slime, drakee, wyvern, golem, trollの計算ノードに関してはssh接続を絶っています。
  • mimicのみssh接続にて使用できます。
  • sbatchとsrunコマンドは使わないようにお願いします。

screenを使おう

ディープラーニングのモデルの学習とかは時間がかかります。コマンドを走らせたらそのまま放置してログアウトしたいですね。
screenコマンドを使うとその辺が便利にできます。

SSH先のターミナルでたくさんのタブを開きたいときに便利です。

  1. 準備:ホームディレクトリに.screenrcというファイルを作り、下記を書いておくと見やすくなる。
    startup_message off
    vbell off
    defscrollback 10000
    hardstatus alwayslastline "%{= cd} %-w%{= wk} %n %t* %{-}%+w"
    
    参考:.screenrcにこれだけは設定しとけっていうオススメ設定
  2. screenを起動する
    $ screen
    
  3. 時間のかかるコマンドを走らせる。たとえば、
    $ python train.py ...
    
  4. (他にも走らせたいコマンドがあれば)新規タブを開く: Ctrl+A c
  5. タブの移動: Ctrl+A n
  6. (要らなければ)タブを閉じる: $ exit
  7. screenからデタッチする: Ctrl+A d
  8. プログラムがちゃんと動いていることを確認する
    $ ps a
    
    もしくは、topコマンドやhtopコマンドでCPUがちゃんと使われていることを確認すると良い。
    GPUの使用状況は下記コマンドで確認。
    $ nvidia-smi
    
  9. SSH先からログアウトする
  10. 再びSSHログインして、起動してあるscreen内に移動する
    $ screen -x
    

だいたいこんな感じです。
なお、時間のかかるコマンドを走らせるときはteeコマンドでログをファイルに出力しておくと良いでしょう。たとえば、

   $ python train.py | tee log.txt

rsyncを使おう

ローカル環境でコーディングして、それをrsyncで共用計算機に送るのは一つの賢い方法かもしれません。
ディレクトリ毎やってしまえば良いと思います。 たとえば、送りたいディレクトリの名前がtmpdirの場合はこんな感じ:

$ rsync -avz tmpdir kanri:~/<ディレクトリを置きたいパス/

こうすると、kanriの"~/ディレクトリを置きたいパス/"にtmpdirが発生します。

tmpdir以下のあるファイルを編集して、再びrsyncをすると、tmpdir全体ではなく変更されたファイルだけが送られます。
つまり、これはscp等の単なるファイル転送とは違って「同期する」という感じの作用になっています。

もし下記を実行すると、tmpdirではなくtmpdir以下のファイル群が直接"~/ディレクトリを置きたいパス/"以下に置かれるという違いがあるので注意。

$ rsync -avz tmpdir/ kanri:~/<ディレクトリを置きたいパス/

vscodeを使おう

エディタはVisual Studio Codeを使うと良いです。 vscode上でSSHもでき、リモート環境での作業が捗るらしいです。

金崎はEmacsしか使えませんが。

その他のtips

Yunyi Guanさんが書いてくれた

計算機で作業する時のTips

論文検索のやり方

Google scholarを使いましょう。キーワードも、論文タイトルも、人も検索できる!

  • "Cited by xxx"が引用件数です。迷ったら引用件数の多い論文を読んでおきましょう。
  • この"Cited by xxx"をクリックするとこの論文を引用している論文一覧が出てくる(便利)。
  • 各論文の右横の[PDF]...リンクからだいたいの論文はダウンロードできる。

論文誌/国際会議を調べるには

Google scholarで有名な論文誌/国際会議を調べることも可能。

左上のメニューバーをクリックしてMetricsを選択するとh5-indexの高い順に論文誌/国際会議が出てくる。 Categoriesで絞って興味のある分野の論文誌/国際会議を特定すると便利かもしれない。