kivantium活動日記

プログラムを使っていろいろやります

OpenAI Gym Roboticsの環境構築とBaselinesの実行

OpenAIが提供している強化学習環境のGymを使って、OpenAI BaselinesのHER (Hindsight Experience Replay) を実行するまでの手順について記録しておきます。環境構築はUbuntu 20.04で行いました。

MuJoCoのライセンス取得

Gymで提供されている環境のうち、3Dを使うものはMuJoCoに依存しています。今回使いたいRobotics環境は3Dなのでライセンスを取得する必要があります。

ライセンスの取得はLicenseから行います。30日間の試用期間中は無料で利用できますが、その後は正式なライセンスを取得する必要があります。学生の個人利用は無料ですが、学生でない場合は個人の非商用利用で年間$500、商用利用では年間$2000掛かります。ぼったくり

私はまだ学生なので、学生個人利用ライセンスを申請しました。申請から数日後にaccount numberがメールで送られてきました。ライセンスページで配布されているgetidなるバイナリを実行して得られるComputer idとaccount numberを登録するとmjkey.txtというファイルをダウンロードできます。これを~/.mujoco/に保存します。

Productsで配布されているmujoco200 linuxをダウンロードします。これを解凍して~/.mujoco/mujoco200/に置きます。

~/.bashrc に以下を追記して(usernameは自分の名前にする)、シェルを再起動します。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/username/.mujoco/mujoco200/bin

必要ライブラリのインストール

OpenAI Gym Roboticsの実行に必要なライブラリ

GymのREADMEに従って以下をインストールします。

sudo apt-get install -y libglu1-mesa-dev libgl1-mesa-dev libosmesa6-dev xvfb ffmpeg curl patchelf libglfw3 libglfw3-dev cmake zlib1g zlib1g-dev swig

MuJoCoに依存する環境を実行するためにはmujoco-pyが必要になります。

pip install -U 'mujoco-py<2.1,>=2.0'

Baselinesの実行に必要なライブラリ

BaselinesのREADMEに従って

sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev

を実行します。

次にTensorFlowをインストールする必要があるのですが、今のところTensorFlow 1.14が推奨されています。自分が使っているPython環境では古すぎてインストールできなかったため、Tensorflowの旧バージョンをインストールする - Qiitaに従ってpyenvでPython 3.7.2の環境を構築してそこでインストールを行いました。

pip install tensorflow==1.14.0

その他、ドキュメントに書いていない必要なライブラリをインストールするために以下を実行します。

pip install matplotlib pandas atari_py filelock mpi4py pytest

Baselinesのインストール

OpenAI Baselinesをインストールします。

git clone https://github.com/openai/baselines.git
cd baselines
pip install -e .

インストールが終わったらテストを実行します。テストが通らなかったら適宜対応してください。

pytest

OpenAI Gym Roboticsの動作確認

まずはOpenAI Gym Roboticsが正しく動くか確認します。以下のコードを実行します。

import gym

env = gym.make('FetchReach-v1')
while True:
    observation = env.reset()
    while True:
        env.render()
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Done!")
            break

ランダムに選んだ動作を無限に続けるコードになっています。正しくインストールされていれば、以下のような画面が表示されます。 f:id:kivantium:20210208215102p:plain:w600

Baselinesの実行

Baselinesに実装されているHER (Hindsight Experience Replay) を実行します。このアルゴリズムは報酬がスパースな環境(例えばロボットアームによる操作が成功したかしなかったかのどちらかしか分からないような環境)でうまく強化学習を行うために開発されたアルゴリズムです。現在の方策がゴールに到達できなかった場合でも、現在の方策で実行できた範囲のものをゴールと設定して報酬を与えることで報酬のスパースさを解決しているようですが、詳細は今度実装したときにでも書きます。

OpenAIによるHERのベースライン実装を実行するには、先にインストールしたbaselinesディレクトリで

python -m baselines.run --alg=her --env=FetchReach-v1 --num_timesteps=5000 --play

を実行すればよいです。ここで実行するFetchReach-v1は、ランダムに選ばれた3次元空間上の点に手を動かすだけの簡単なタスクなので、CPUのみの環境でもすぐに100%成功するようになります。学習結果はこんな感じになりました。

次回があれば、PyTorchあたりで強化学習アルゴリズムを何か実装します。

参考サイト

Thinkpad X13 Gen1 (AMD) を買った

年末セールで Thinkpad X13 Gen1 (AMD) を買いました。

(このツイートの後で自分が学生であることを思い出して学割ストアで買ったので、最終的には164,934円でした)

Ryzen人気のせいか納期が遅いという評判で、自分のところにも納品予定が3月下旬になるというメールが一度来ましたが、結局1ヶ月で届きました。

以下、セットアップでやったことを記録しておきます。

Windows 10のセットアップ

前回Windows 10をセットアップしたときに、表示に従ってMicrosoftアカウントと紐付けたらユーザー名が日本語になってしまいました。 通常は日本語ユーザー名でも問題ないと思うのですが、Adobe CCのインストール時にユーザー名に2バイト文字が含まれていることが原因の問題を踏んだことがあるので、確実に英数字のユーザー名に設定するためにローカルアカウントでセットアップすることにしました。

Windows 10 ローカルアカウントセットアップ手順 | cloud.config Tech Blogにあるように、インターネットに繋がずにアカウントを作成すればMicrosoftアカウントの使用を回避できます。 誘導に従ってうっかりインターネットに接続してしまったのですが、Shift+F10 を押してコマンドプロンプトを立ち上げて

netsh wlan delete profile name=”ネットワーク名(無線LANならSSID)”

を実行してネットワーク接続を切断してから左上の←ボタンを押して戻れば、ローカルアカウントでセットアップできました。

Ubuntu 20.04 とのデュアルブート

普段の作業はUbuntuで行っているのでWindows 10とのデュアルブート環境を構築しました。 以下の手順には不要なものが含まれているかもしれませんが、どれが不要なのかを検証するために環境を壊したくないのでとりあえず自分がうまく行った手順を記録しておきます。

Windows 10 上で行うこと

高速スタートアップの無効化

コントロールパネル → ハードウェアとサウンド → 電源オプション → 電源ボタンの動作を選択する → 電源ボタンの定義とパスワード保護の有効化 を開き、 現在利用可能でない設定を変更します をクリックしてから、高速スタートアップを有効にする(推奨) のチェックを外して「変更の保存」を押しました。

BitLocker の無効化

スタート→設定 → 更新とセキュリティ → デバイスの暗号化 を開き、「デバイスの暗号化が有効になっています」の下にある オフにする をクリックしてBitLockerをオフにしました。

BIOSの設定

起動直後にEnterキーを連打してF2を押せばBIOS設定メニューが開きます。

Secure Boot の無効化

Security > Secure Boot > Secure Boot を開いて Secure Boot をオフにしました。

Sleep State の変更

Config > Power > Sleep State を開いて Windows 10 から Linux に変更しました。こうしないとサスペンド時に問題が起こるそうです(参考: ThinkPad X13 Gen 1 (AMD) + Ubuntu 20.04 における不具合の解決 - Qiita

ブートUSBの作成

ThinkPad X13 Gen 1 (AMD) + Ubuntu 20.04 における不具合の解決 - Qiita によると、Ubuntu 20.04 でインストールされるLinux 5.4では問題が発生するらしいので Ubuntu 20.04.1 をインストールしました。

Ubuntu Desktop 日本語 Remixのダウンロード | Ubuntu Japanese Team から20.04.1の日本語Remixをダウンロードし(Ubuntu Japanese Team のみなさんありがとうございます)、手元のUbuntu 18.04でブートUSBを作成しました。

Ubuntuのインストール

ブートUSBを差し込んだ状態で起動し、Enterを連打してブート設定に入り、F12でUSBを起動メディアに設定してUSBから起動しました。 画面の指示通りにインストールするだけで無事終わりました。ディスク容量はWindowsUbuntuで均等にしました。

Ubuntuのインストール後に行った設定

ディレクトリ名を英語にする

ターミナルを起動して

LANG=C xdg-user-dirs-gtk-update

CapsLockをCtrlにする

コマンド一発でCapsLockをCtrlに変える方法を参考にしました。

gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"

/etc/default/keyboardXKBOPTIONS の行を XKBOPTIONS="ctrl:nocaps" に変える方法もあるようですが、こっちはうまく動きませんでした。

Windowsの時計がずれないようにする

デュアルブートにすると、Windowsの時計が9時間ずれます。Ubuntu側で

sudo timedatectl set-local-rtc true

を実行すると直ります。

不具合について

上記の手順でインストールしたところ、ThinkPad X13 Gen 1 (AMD) + Ubuntu 20.04 における不具合の解決 - Qiitaで言及されていた画面の明るさ調整ができない問題とサスペンドが出来ない問題は発生しませんでした。 インストール直後に sudo apt upgrade したら Linux 5.8.0 が入ったので、20.04 リリース直後のカーネルでの問題は解決済みのようです。(よく観察すると起動するたびに明るさがリセットされ、明るさを1段階下げるだけで明るさが最低レベルになるので若干挙動が怪しい気もしますが、実用上問題ないです)

レビュー

ベンチマーク

今まで使っていた Thinkpad X1 Carbon (2017) との比較のためにGeekbench 5ベンチマークを取りました。 結果はこんな感じでした。

f:id:kivantium:20210128133225p:plain

詳細はここから確認できます LENOVO 20UFCTO1WW vs LENOVO 20HQCTO1WW - Geekbench Browser

マルチコアでの性能が3倍以上違うのには驚きました。Ryzenすごい。

キーボード

ラップトップのキーボードは使わない人もいますが、ラップトップにキーボードを外付けして使うのが好きになれない自分としてはキーボードも重要なポイントになります。

f:id:kivantium:20210128134401j:plain:w500

キー配列はこんな感じで、右端のキーが若干狭くなっています。慣れれば問題ないかもしれませんが、少し気になるところです。 打鍵感はMacBook Proよりはマシですが、Thinkpad X1 Carbon (2017)と比べるとちょっと固くて打ちにくいと感じました。

今後使ってみて気になるところがあったら追記します。

2020年12月

近況

ラップトップのキーボードを壊した

愛用している Thinkpad X1 Carbon のキーボードのスペースキーの下のゴミが気になったのでキートップを外して掃除をしたところ、部品のツメを折ってしまったらしくキートップが戻らなくなってしまいました。考えてみるともう3年間今のマシンを使っているので買い替えろと神様のお告げかもねと思い、新しいパソコンを買うことにしました。噂のRyzenを使ってみたかったのでThinkpad X13にしました。

2月頃に届くらしいのでそのときにレビューします。届くまでの間はxmodmapで変換キーをスペースキーに割り当てて何とかやっています。

読んだ本

留学してたのにカナダのことをよく知らなかったので読みました。「カナダはアメリカではない」がテーマだったのですが、この意識は自分も滞在していて強く感じました。英語を話すことをはじめとしてアメリカとカナダには共通点がたくさんあるのですが、充実した社会保険や銃規制の成功などによりアメリカよりも住みやすい環境が整備されているように思います(何よりヤードポンド法がない!)。アメリカは格差が固定化してしまい、もはやアメリカンドリームはカナダのほうが実現しやすい とまで言われているようになっており、今後カナダへの注目が高まる可能性もある気がするのでもう少し勉強してみようと思います。

科学者が「起業」で成功する方法

科学者が「起業」で成功する方法

起業の本はたくさんあるのですが、科学者にフォーカスした本を見たのは初めてだったので読んでみました。記述が抽象的であまり具体的なイメージを持てなかったのですが、科学者に求められる資質が経営と食い合わせが悪いからチームを作りましょうというのはなるほどと思いました(まぁどうやってチームを作るかを書いてくれないと困るわけですが、そういうのは一期一会なので本に書けるものではない……)

天冥の標の小川一水の新作なので読みました。ハヤカワが異世界ピクニックなどの百合SFを猛プッシュしているわけですが、この作品は人口が少ない宇宙移住者コミュニティーというSF設定にすることで結婚への圧力が強い社会を自然に作り出すことに成功していて、SFを百合と組み合わせる必然性を感じました。「ランナウェイ」部分がデウス・エクス・マキナ的でいまいちだった(結末がいまいちになりがちなのが小川一水作品の悪いところ……)のですが、今後の方向性を感じることができました。

まほろまてぃっくぢたま某の新作なので読んでいたのですが、4巻で打ち切りになってしまいました。悲しい

ファインマン物理学〈5〉量子力学

ファインマン物理学〈5〉量子力学

2020年11月

近況

論文投稿とリジェクト

6月くらいからちょこちょこ進めてきた研究が一段落したので投稿しましたが、エディターリジェクト(査読者に見せる前に編集部の判断で不掲載を決めること)されました。内容は面白そうだが扱う対象が専門的すぎるから別の雑誌に出すことをおすすめするというコメントだったので、紹介された雑誌に投稿して反応を待っています。投稿して2週間反応がないのでエディターリジェクトは回避できたと信じたい……

博士課程から始めた研究はシミュレーション環境をセットアップするのに苦労して全然進んでいません。本来こんなところで止まるべきではないんでしょうが、今年のこの状況で無理しても良いことがあるとは思えないので体調を崩さないことを最優先にしてのんびり進めることにしています。というわけであまり書くことがありません。

読んだ本

創薬化学: メディシナルケミストへの道

創薬化学: メディシナルケミストへの道

  • 発売日: 2018/10/01
  • メディア: 単行本

今やっている研究はだいたい「創薬に役立つ」と主張して予算を取っているので創薬のことを知ろうと思って読みました。この本は概論が多くて参考文献リストもないためあまり得るものがありませんでしたが、この本のおかげで日本十進分類法でいう499.3に学ぶべき本があるという知見が得られたので、良さそうな本をいくつか見つけることができました。

2020年10月

もう11月がはじまって1週間が経ってしまいましたが一応書きます。特に何もやってないので書くこともないんですが……

DeepMindインターン

大学からDeepMindインターンを募集していると案内されたので申し込んだら即落とされました

せっかくなのでお祈りメールを貼っておきます

Dear **********,

We appreciate your interest and the time you took to apply for the Research Scientist Intern, Sciences 
role here at DeepMind. 

Having reviewed your application, we have made the decision not to progress you further in our process.
While we are not able to share more detail on why you were not selected for this role,
we do hope you apply for other opportunities that are of interest.
If you have already applied to other roles, we will update you on the status of your application for those
roles separately. 

Thank you for your interest in DeepMind and for the time you invested in exploring this opportunity
with us. 

DeepMind Recruitment Team  

学校からの奨学金だけで生活するのが厳しそうなのもあり、今後もインターンに応募してお祈りメールを収集していく予定なのでご期待ください。

ルーターを作る課題

今月はかなりの時間をルーターをソフトウェアに作る課題に費やしました。元ネタは以下のページにあるものっぽいです。
Simple Router · mininet/mininet Wiki · GitHub

クライアントからルーターを経由してサーバーが接続されている仮想ネットワーク上で、クライアントからサーバーに対してping, traceroute, wgetが実行できるようにするルーターを作るのが課題でした。時間は掛かりましたがARPプロトコル・IPプロトコル・ICMPプロトコルの理解が深まって大変良い課題だったと思います。

その他

読んだ本

共産党宣言 (光文社古典新訳文庫)

共産党宣言 (光文社古典新訳文庫)

熱力学 (講談社基礎物理学シリーズ)

熱力学 (講談社基礎物理学シリーズ)

2020年10月

相変わらずだらしない生活をしています

DeepMindインターン

大学からDeepMindインターンを募集していると案内されたので申し込んだら即落とされました

せっかくなのでお祈りメールを貼っておきます

Dear **********,

We appreciate your interest and the time you took to apply for the Research Scientist Intern, Sciences 
role here at DeepMind. 

Having reviewed your application, we have made the decision not to progress you further in our process.
While we are not able to share more detail on why you were not selected for this role,
we do hope you apply for other opportunities that are of interest.
If you have already applied to other roles, we will update you on the status of your application for those
roles separately. 

Thank you for your interest in DeepMind and for the time you invested in exploring this opportunity
with us. 

DeepMind Recruitment Team  

学校からの奨学金だけで生活するのが厳しそうなのもあり、今後もインターンに応募してお祈りメールを収集していく予定なのでご期待ください。

ルーターを作る課題

今月はかなりの時間をルーターをソフトウェアに作る課題に費やしました。元ネタは以下のページにあるものっぽいです。
Simple Router · mininet/mininet Wiki · GitHub

クライアントからルーターを経由してサーバーが接続されている仮想ネットワーク上で、クライアントからサーバーに対してping, traceroute, wgetが実行できるようにするルーターを作るのが課題でした。時間は掛かりましたがARPプロトコル・IPプロトコル・ICMPプロトコルの理解が深まって大変良い課題だったと思います。

その他

読んだ本

共産党宣言 (光文社古典新訳文庫)

共産党宣言 (光文社古典新訳文庫)

熱力学 (講談社基礎物理学シリーズ)

熱力学 (講談社基礎物理学シリーズ)

2020年9月

9月から博士課程1年生になりましたが、入国制限があって現地に行けないため相変わらず実家でだらっと過ごしています。大学自体もまだ入構制限があるためほとんどの講義がオンラインで実施されているのですが、時差には配慮されていないので日本の深夜に行われるものが多く、受けられる講義が限られています。今学期は学部のときに受けそびれたインターネットの講義と密度汎関数法の講義の2つを取ることにしました。(単位が出ないライティングの授業も取っていますが、面白くないのに履修解除できなかったので仕方なく聞き流しています)

インターネットの講義は、授業は毎週投稿される動画を見るだけで、小テストだけ現地時間に出席すればよいという外国人に親切な仕様になっています。一方、密度汎関数法の講義は授業中に発表を求められるのでどうしても現地時間に合わせる必要があります。ほとんどの状況で自分の英語力が最弱なので発表を求められると非常につらいのですが、やっていくしかありません。

せっかくなのでカリキュラムについて説明しておきます。
学部から直接博士課程に入学した学生は8単位、修士を取った後に博士課程に入学した学生は4単位を取ることが求められています。自分は修士を取ってから入ったので4単位が要求されています。コンピュータサイエンスの幅広い知識を身につけていることが博士の要件らしいので、この4単位は異なる研究分野から選ぶことが求められています。Ph.D. candidacyを獲得するために博士課程開始から3年(学部から直接入った場合は4年)以内に単位を揃えておく必要があるようですが、単位を揃えた学生だけが申し込める奨学金が存在するので早めに揃えておいたほうがいいみたいです。(Ph.D. candidacyが何なのかよく分かっていないのですが、1) 単位を揃える 2) Qualifying Oral に合格する 3) 博士論文のテーマが委員会によって承認される の3要件が必要らしいです)


博士課程の学生にはRAとTAという形でお金が支給されています。RAは在籍していれば無条件で支給されます(人によって違うらしいですが、僕の場合は年間$21,000)。TAはやった人にだけ支給され、年間2つのTAをやることが標準になっています(1つのTAは60時間の仕事が要求され、およそ$3000もらえるらしいです)。授業料(今年は$8500)の支払いは免除されています(書類上は授業料相当額を大学が学生に支払い、学生が大学にその額を支払うということになっています)。

ただし、この支給を受けるためには現地の銀行口座が必要になります。現地の銀行口座の開設には学生ビザを取得した状態で入国した際に与えられる現地のマイナンバー的なものが必要となるので、現地の口座はまだ開設できていません。そのため、今のところ大学からは1ドルも受け取っていません(払えなかった分はプールされて、口座を開設次第受け取れるそうですが)。また、TAをするためにはマイナンバー的なやつを提出することが法律で求められているらしく、今学期は1つもTAをすることができていません。担当者に「TA代を減らさないためにはどうすればいいか?」と尋ねたところ、「入国できるようになったらたくさんやってくれ」とのことでした。英語がいまいちな自分がTAを通常より多くやるのは現実的ではないので、今年の分のTA代は受け取れないものと思っています。悲しい。

読んだ本

PID制御について勉強したかったので読みました。全く知らない分野なので面白かったですが、具体的にどう制御理論を使うのかイメージが持てなかったので理解は適当です。

モーターってすげぇ(小並感)って感じで読みました。

統計に頼るのではなく、一例を挙げて全部に適用しようとする論法が多くいまいちでした。黒人差別や健康保険の問題などアメリカ固有の話が多いのもいまいちでした。

印象が薄くて何が書いてあったか思い出せない……

はじめてのロボット創造設計 改訂第2版 (KS理工学専門書)

はじめてのロボット創造設計 改訂第2版 (KS理工学専門書)

一応は目を通したほうがいいのかもしれないが、これだけ読んでも何か作れるようにはならないという印象でした。

ざっとしか分かりませんでした

広告コーナー