2024年度11月研究プロジェクト

期間: 2024/10/31 - 2024/11/27

課題

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

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

最後に発表会で発表する。

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

※流行りのLLMやVLMを使っても良い。例:Google Colab で LLaVA-1.5 を試す(ランタイムタイプがT4の場合、llava-v1.5-7bでないと動かないかも)

スケジュール

※金曜日は研究室訪問推奨日。

  • 11/8 (Fri.)   何をやることにしたかをslackで報告
  • 11/15 (Fri.)   slackで進捗報告(この日までに課題が50%できていることを目指す)
  • 11/22 (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のインストール方法はこちら


共用計算機の使い方

TSUBAMEの使い方

ssh-key作成

ローカルの環境においてホームディレクトリ直下に.sshディレクトリがあるか確認する。

$ ls -la

.sshディレクトリが見つからなかったら新たに作成

$ mkdir .ssh

.sshディレクトリへ移動

$ cd .ssh

ssh-keyを作成していない場合、ssh-keyを作成。(4096bit長の方が安全と聞いたので私は4096bit長にしています。)

rsaキーペアを4096bit長で作成する場合

$ ssh-keygen -t rsa -b 4096

一回Enterを押すとキーペアの作成場所を聞かれる。デフォルトでは~/.ssh。気にしない方はEnterを押す。

次はパスフレーズを聞かれる。これはssh接続する際にパスワードを設定することができ、そのパスワードのことです。 なしでよい場合Enter。 パスフレーズを設定したい場合はパスフレーズを入力してEnter。

パスフレーズの確認を求められた後ssh-keyが作成される。

これの公開鍵の方(今回の場合~/.ssh/id_rsa.pub)の方をクラウドへアップロードする。

TSUBAMEポータルに公開鍵を登録

東工大ポータルへログイン。

「TSUBAMEポータル」を開く。

左のメニューより「SSH公開鍵登録」をクリック。

ここに先ほど作成したid_rsa.pubをアップロードorコピーペーストして追加する。

ssh接続

学籍番号が21M12345の場合

$ ssh 21M12345@login.t4.gsic.titech.ac.jp

でログインできます。

sshconfigを作成

ssh接続を楽にするためにconfigファイルを設定する。

$ vim ~/.ssh/config

以下を追記(学籍番号が21M12345の場合)

Host tsubame
        hostname login.t4.gsic.titech.ac.jp
        User 21M12345

これで

$ ssh tsubame

でログインできるようになります。

実際の使い方

ログインするとlogin0かlogin1のどちらかのノードにいる状態になります。 これらのノードは全てのユーザーの共用スペースのため、ここで重い処理を行っていると中断させられたり、注意されたりします。 何かを実行させたいときは基本的に計算ノードを用いることになります。

ジョブの投入方法

ジョブスクリプトというシェルスクリプトを実行する形でジョブをTSUBAMEに投入します。

以下はジョブスクリプトの説明です。

#!/bin/sh 
#$ -cwd →カレントディレクトリでジョブを実行
#$ -l f_node=1 リソースタイプの指定(必須)。詳細は後述。 
#$ -j y →標準エラー出力を標準出力ファイルに統合
#$ -l h_rt=05:00:00 →経過時間指定(必須)
#$ -o output/o.$JOB_ID →標準出力ファイル名の指定。${JOB_ID}変数にはジョブのIDが格納されている。

python ~.py等何か実行したいスクリプト

以下はジョブスクリプトのサンプルです。

#!/bin/sh
#$ -cwd
#$ -l f_node=1
#$ -j y
#$ -l h_rt=05:00:00
#$ -o output/o.$JOB_ID

python sample.py
リソースタイプについて

TSUBAMEリソース

TSUBAMEのジョブ関連の基本的なコマンド
ジョブ投入
$ qsub -g グループ名 (-ar 予約番号) -o 標準出力ファイルの相対パス シェルスクリプト名.sh

-arオプションは予約している場合のみ記述

自分が投入したジョブを確認
$ qstat
投入したジョブを削除
$ qdel ジョブのID
TSUBAME計算ノードの予約状況一覧を取得
$ t4-user-info compute ars

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 ユーザ名@login.t4.gsic.titech.ac.jp:~/<ディレクトリを置きたいパス/

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

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

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

$ rsync -avz tmpdir/ ユーザ名@login.t4.gsic.titech.ac.jp:~/<ディレクトリを置きたいパス/

vscodeを使おう

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

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

Singularityを使おう

0. Singularityのインストール(ローカルマシン)

   $ sudo wget -O- http://neuro.debian.net/lists/xenial.us-ca.full | sudo tee /etc/apt/sources.list.d/neurodebian.sources.list
   $ sudo apt-key adv --recv-keys --keyserver hkp://pool.sks-keyservers.net:80 0xA5D32F012649A5A9
   $ sudo apt-get update
   $ sudo apt-get install -y singularity-container

1. Ubuntuのイメージを作る(ローカルマシン)

   $ sudo singularity build -s ubuntu.img docker://ubuntu
   $ sudo singularity shell --writable ubuntu.img

これでイメージの中にroot権限でログインできたので、色々なパッケージをインストールして環境を構築する。たとえば…

   # apt install cowsay

自分のユーザアカウントを作成する

   # adduser <your name>

パスワードを入力する。他の項目は全て何も入力せずEnterキーを押すのみでOK。

singularityのイメージからログアウトし、自分のユーザアカウントで再度ログインする。

   # exit
   $ singularity shell ubuntu1804.img

ここでlsを実行してみると分かるように、/home/以下のファイルはローカルマシンと共有している。singularityのイメージの中の自分のユーザアカウントはsudo権限を持たないため、root権限で何かをインストールする場合は、再びログアウトしてrootでログインして行う。

2. イメージを共用計算機に送る(ローカルマシン)

   $ rsync -avz ubuntu.img ユーザ名@login.t4.gsic.titech.ac.jp:. 

3. イメージを使う(共用計算機)

   $ singularity exec --nv ubuntutest.img/ /usr/games/cowsay hoge

これで、共用計算機にはインストールされていないcowsayというコマンドが使えるようになる。

次に、自分のユーザアカウントでログインする。

   $ singularity shell ubuntu1804.img

ここでlsを実行してみると分かるように、/home/以下のファイルは共用計算機と共有している。

SingularityでGPUを使うときの注意点

  • runするときの -nvオプション(GPUを使うために必要)
  • NVIDIAドライバがコンテナとホストマシンで同じでないと動かない!(nvidia-smiでエラーが。) https://github.com/hpcng/singularity/issues/1292

If you install the libraries from the nvidia driver (like the contents of this run file) into your container than you can use the GPU on the host system. But ONLY if the host system has the exact same driver installed.

論文検索のやり方

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

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

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

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

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