YS’s blog

You only live once.

Ryzen Threadripper 3970XとNVIDIA RTX 3090を使ってnumpy(Intel MKL and OpenBLAS)とcupyでベンチマーク [追記:jaxでも計測した]

numpy でベンチマーク # ファイル名: numpy_benchmark.py import os os.environ["OPENBLAS_NUM_THREADS"] = "32" # import mkl # mkl.set_num_threads(32) import numpy as np import time from threadpoolctl import threadpool_info from pprint import pp pp(threadpool_info()) np.show_config() N_LOOP = 5 calc_eigh_time_list = [] calc_inv_time_list = [] calc_dot_time_list = [] calc_norm_time_list = [] for size in [5000, 10000, 20000]: print(f"size : {size}") for i in range(3): np.random.seed(i) X = np.random.randn(size, size) t_start = time.time() np.linalg.eigh(X @ X.T) calc_eigh_time_list....

March 18, 2022

PythonとopenCVで並列化

openCV でマルチプロセス化しようとしてもシングルプロセスになっている問題に遭遇 Python で openCV を使った処理をマルチプロセス化してみたのだが、どうもシングルプロセスになってしまうという問題に遭遇した。 解決策:cv2.setNumThreads(0)&マルチプロセスをやめる。 cv2.setNumThreads(0) を加えて、かつマルチスレッド化(例えば、concurrent.future.ThreadPoolExecuterなど)することで効率的に並列処理可能になることが分かった。 cv2.setNumThreads(0)有りでもconcurrent.future.ProcessPoolExecuterでは、正しくマルチプロセスされなかった。 以下テンプレート。 import cv2 from concurrent.futures import ThreadPoolExecutor cv2.setNumThreads(0) def task_using_cv2(param): do_some_process_using_cv2() return with ThreadPoolExecutor() as executor: results = list(executor.map(task_using_cv2, param)) 参考

March 17, 2022

Ubuntu 20.04 LTSセットアップ(自宅サーバー用)とリモート環境用の諸々の初期設定(docker + cuda + ssh + vscode)

Ubuntu 20.04 LTS の導入 こちらの記事に従って、Ubuntu 20.04 LTS を入れた。 ライブ USB の作成 Rufus をダウンロード ubuntu の iso ファイルをダウンロード USB を挿して、Rufus を使ってライブ USB を作成 Ubuntu 20.04 LTS のインストール 細かい設定はこちらの記事を参照 インストール後にログインループになってログインできなくなった ctrl + alt + F2で tty 仮想コンソールを開く Nvidia ドライバ, cuda があるかどうか確認 dpkg -l | grep nvidia dpkg -l | grep cuda ※もしですでにある場合は削除しておく sudo apt-get --purge remove nvidia-* sudo apt-get --purge remove cuda-* Nvidia ドライバが無かったら下記で Nvidia ドライバと cuda を入れる sudo ubuntu-drivers install sudo reboot または version 指定して入れる。...

March 11, 2022

本格水冷 GPU マシンを導入した (ASUS EKWB RTX3090 + Ryzen Threadripper 3970X)

機械学習の分野、特に深層学習の分野だと GPU がないとかなり厳しいので自宅にオンプレ GPU マシンが前々から欲しかったが、アメリカでポスドクをしていたこともあり、本帰国してから導入すればいいやと思っていた。 GCP や Azure の VM インスタンスは V100x2 とかで運用すると長期的にはかなりコストがかかるし、Colab Pro, Pro+は、コスパはとても良いが割当 GPU のランダム性やデータを一々配置し直す必要があるのが面倒くさい。そもそもいつまでサービスが続くかも分からない。 とはいっても GPU でちょっと遊ぶくらいなら Colab は間違いなく便利なサービスだと思う。 Lambda PC(GPU Workstation)なども検討したが、RTX3090 をフルで回したらファンの音が煩そうなので本格水冷の GPU マシンが欲しいと思っていた。ただそうはいっても自作できる技量はないので、大枚はたいて各種パーツを購入し、MOMA GARAGEさんにお願いし、本格水冷の GPU マシン を組み立ててもらった。(門馬さん、ありがとうございます!) 組み立て後の PC の中身 MO-RA3 360 PRO (冷却用ラジエーター) 主なパーツ マザーボード : ASUS ROG Zenith II Extreme Alpha CPU : Ryzen Threadripper 3970X GPU : ASUS EKWB RTX3090 24GB GDD6X RAM メモリ : G.Skill F4-3200C 16D-32GTZRX SSD : SAMSUNG 980 PRO MZ-V8PT0B 冷却用ラジエーター 1 : Watercool MO-RA3 360 PRO stainless steel 冷却用ラジエーター 2 : Black Ice Nemesis 480GTS CPU ウォーターブロック : EK WaterBlocks EK-Quantum Velocity sTR4 D-RGB - Full Nickel 本格水冷の効果 RTX3090 2枚をフルで回しても、nvidia-smi で確認する限りは 45 度くらいまでしか GPU の温度は上昇しなかった。空冷だと経験上 65-70 度くらいまで上昇するので、水冷の冷却効果が極めて高いことが分かった。...

February 28, 2022

nvcr.io/nvidia/pytorchのイメージからdockerコンテナを作成したときのNOTE

NGC 提供の Pytorch イメージを使って docker コンテナを立ち上げる。 NVIDIA NGC | CATALOGから NGC(NVIDIA GPU CLOUD)が提供している、Pytorch の docker イメージをとりあえずdocker runをしてみる。 docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:21.12-py3 /bin/bash すると、下記のような NOTE が一番下に現れたので調べてみた。 NOTE: The SHMEM allocation limit is set to the default of 64MB. This may be insufficient for PyTorch. NVIDIA recommends the use of the following flags: docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 ... The SHMEM allocation limit is set to the default of 64MB 一時ファイル領域の/dev/shm のサイズでデフォルト値は 64GB。--shm-size 2g みたいにしておけばよい。...

February 23, 2022

家のネット環境の改善

RT-AX86U の導入 日本に本帰国してから家の Wi-Fi の環境を快適にしたいと考えてを ASUS の RT-AX86U を導入した。NURO 光の ONU に加えるので二重ルータになることになるが下記の記事を参考に設定すると問題なくルーターとして機能させることができた。時間帯にもよるが、上りも下りも 500-700Mbps くらい出た。ちなみに NURO 光の ONU は F660A である。 参考 https://digitalnetlife.com/asus-wifi6-nuro-internet/ https://raife.jp/network-router-rtax86u-f660a/ ゲーミング LAN ポートで有線接続すると、700-900Mbps くらい出て自宅サーバーへの scp や rsync でのファイル転送も、80-90MB/s くらいで快適にできるようになった。 ドアの隙間から有線 LAN を通す。 上で導入した RT-AX86 は部屋の外においてあるので、なんとか部屋の中にあるサーバーに有線 LAN を通したいということでドアの隙間から通せるエレコム LAN ケーブル 0.4m 隙間 CAT6A 準拠 シルバー LD-VAPF6A/SV04 を購入した。写真の通り、ドアの隙間から LAN を通すことに成功し、700-900Mbps を維持することができた。

February 20, 2022

PythonとOpenCVで画像リストから動画を作成

openCV を使って画像リストから動画を作成する。 画像リストがあったときにそこから動画を生成するときに使う。 from pathlib import Path from typing import List import cv2 def list_file_paths(dir_path: str) -> List[str]: """ List file paths in a directory. Parameters ---------- dir_path : str Path of the directory Returns ------- List[str] List of the file paths in the directory """ return sorted([str(path) for path in Path(dir_path).rglob("*") if path.is_file()]) def create_mp4_video_from_image_path_list( output_video_path: str, image_path_list: List[str], fps: int, ) -> None: """ Create mp4 video file from a image path list Parameters ---------- output_video_path : str Path of the output video image_path_list : List[str] Path of image file list fps : int fps (frames per second) """ height, width, _ = cv2....

February 15, 2022

続 アメリカで矯正歯科に行った話

日本に本帰国して無事に継続で矯正治療を行ってくれる矯正歯科を発見し、矯正治療をつい先日終えることができた。記念に矯正治療前と治療後の比較画像を貼っておく。 矯正治療前は、上の前歯が 2 本前方にはみ出していてさらに、上の歯と下の歯が噛み合っていなかったが、上下4本抜歯をしてもらい、矯正治療を終えた結果、歯並びとかみ合わせが劇的に改善した。一方、下の前歯には若干ブラックトライアングル的なものができてしまったが、まあこのあたりは歯科矯正のトレードオフらしいので仕方がない。 結論 歯科矯正は人生を変える。

February 2, 2022

loggerとprintとtqdmの併用

logger と print と tqdm を併用する場合は以下のコードをコピペする。tqdm の出力に色付けできる。 import contextlib import logging import logging.handlers import sys from time import sleep from tqdm import tqdm from tqdm.contrib import DummyTqdmFile class TqdmLoggingHandler(logging.Handler): colors = {"INFO": "\033[37m{}\033[0m"} def __init__(self, level=logging.NOTSET): super().__init__(level) def emit(self, record): try: record.msg = TqdmLoggingHandler.colors.get(record.levelname, "{}").format( record.msg ) msg = self.format(record) tqdm.write(msg, file=sys.stderr) self.flush() except Exception: self.handleError(record) class CustomFormatter(logging.Formatter): grey = "\x1b[38;20m" green = "\x1b[32;20m" yellow = "\x1b[33;20m" red = "\x1b[31;20m" bold_red = "\x1b[31;1m" reset = "\x1b[0m" format = "[%(asctime)s] [%(levelname)s] [%(process)d] [%(name)s] [%(funcName)s] [%(lineno)d] %(message)s" FORMATS = { logging....

January 13, 2022

AzureでA100x8(V100x4)のPytorch環境構築とエラー対処

Azure の web で VM インスタンスを作成 VM インスタンスの作成はこちら 秘密鍵をダウンロードして、read 権限を与えていおく。 cp ~/Downloads/your_key_name.pem ~/.ssh/keys/azure_vm_key.pem chmod 400 ~/.ssh/keys/azure_vm_key.pem ssh を使って VM にアクセス ssh -i ~/.ssh/keys/azure_vm_key.pem azureuser@<public ip address of VM instance> Cuda をインストール wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda-repo-ubuntu1804-11-5-local_11.5.0-495.29.05-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1804-11-5-local_11.5.0-495.29.05-1_amd64.deb sudo apt-key add /var/cuda-repo-ubuntu1804-11-5-local/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda Data Center GPU manager のインストール(A100x8 の場合) bandwidthTest を行う 詳細は、こちらを参照。 A100x8 ではここでエラーが出る、V100x4 では出ない git clone https://github.com/NVIDIA/cuda-samples.git cd cuda-samples/Samples/bandwidthTest make ....

January 12, 2022

Pythonでファイルリストからの並列処理

ファイルのリストを受け取って何らかの並列処理をする。 from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor from functools import partial from pathlib import Path from typing import List def list_file_paths(dir_path: str) -> List[str]: """ List file paths in a directory. Parameters ---------- dir_path : str Path of the directory Returns ------- List[str] List of the file paths in the directory """ return sorted([str(path) for path in Path(dir_path).rglob("*") if path.is_file()]) def task(same_value, same_value2, diffent_values): return None def multiprocess_task(task, same_value, same_value2, diffent_values): with ProcessPoolExecutor() as executor: results = list(executor....

January 3, 2022

Last day in Santa Barbara

この日にサンタバーバラに来てからあっという間に3年間が経った。2年間住んだ Berkshire Terrace ともお別れである。 家具の大部分は FaceBook のコミュニティを通して UCSB の学生に買い取ってもらったので大きいもので捨てるものはほとんど無かった。 窓際のL字型の机 キッチン&ダイニング アパートと壺 2年間住んだアパート。Berkshire Terrace バスの中から見たダウンタウン 空港への道中

September 11, 2021

UCSBポスドク記

Henly Gate キャンパス内 キャンパスビーチとラグーン 2017 年秋 海外ポスドクを志す 昔からいつかはアメリカで研究してみたいという漠然とした思いがあった。博士号取得後の 2018 年 4 月からの勤務先は決まっていたが、もしもうまく海外ポスドク先が決まれば退職して海外へ行くという意向をボス(予定)に相談したところ快諾して頂いた。この時期から海外ポスドク先を探し始めた。ラボ選びの方針は以前の記事で書いた通りである。また同時期にElings Prize Fellowshipにも応募した。 2018 年 2 月 Elings Prize Fellowship のオファー 幸運にもカリフォルニア大学サンタバーバラ校から Elings Prize Fellowship のオファーレターを頂き(日本人初)、同大学のAndrea Young グループに同年 10 月から行くことが決定した。 ※上のオファーレターによると 2018 年では Elings Prize Fellowship の年間給与予定額は 60000USD (~ 660 万円)だが、2021 年現在は公式サイトにある通り 65000USD になっている。また UC サンタバーバラのポスドクの給与は年間 2%上昇する(これはフェローシップに限らない)。したがって 2021 年現在 Elings Prize Fellowship を獲得すると 1 年目 65000USD, 2 年目 66300USD, 3 年目 67626USD (~ 743 万円) となる。 2018 年 3 月 博士(工学)取得 博論審査を無事に通過して、東大から博士号が授与された。同時期に幸運にも日本学術振興会育志賞も頂いた。...

September 10, 2021

海外ポスドクになる方法と現地フェローシップ

ポスドク(Postdoctoral Researcher; 博士研究員)のポジションは世界中に無数にあるので博士号さえ持っていれば容易になれる(なりたいかどうかはもちろん人による)。日本から海外のポスドクを目指す際に多くの人はまず第一に海外学振をとることを目指すと思うが、少なくともアメリカに関しては、応募先のラボがある程度以上に研究費が潤沢であれば応募者側に明らかに問題がない限り(例えばコミュニケーションに極端に難がある、前所属で何らかの問題を起こしたなど)フェローシップ無しでもポスドクに応募して落ちることはまずない。“研究費に困っていない"ラボの主宰者(PI)が、応募してくるポスドクを断る理由がほぼないのである。論文が 1 本もないからと言って海外ポスドクを諦める人をたまに見かけるが、アメリカには論文無しで学位をとってポスドクやってる人なんて山ほどいるから基本的には問題にはならないと思う。従って、海外ポスドクになりたい場合はいくつか研究費が潤沢そうで“良さげなラボ”の候補を決めてとりあえずメールを送ってみるのが良いと思う。ラボの PI のもとにはかなり多く(数十から 100 以上)の迷惑メールが届くので(メールアドレスを論文の責任著者として各論文誌の web サイトに公開しているため)、返信がなくともめげずに何度も送って見るのが良い。もちろんメールを送る前に学会などで顔見知りになっていればなお良いと思う。 海外ポスドクになる方法 海外ポスドクになるには、1) フェローシップ無しで現地のラボに直接応募する(アメリカでは最も一般的)、2) 海外学振を獲得する、以外にも 3) 現地のフェローシップを獲得するという方法がある。現地のフェローシップというの国や地域、そして各研究機関が出しているフェローシップのことである。フェローシップ獲得のメリットは、お給料が同じ研究機関のポスドクよりも 100 万円前後高くなる(特に各研究機関が出している場合)のと、アカデミックキャリアを目指すのであれば研究費獲得実績と言う点でプラスになることである。デメリットは倍率が高い(例えば 30 倍-100 倍以上)のである程度は運である点である。例えば私が知っている物理関連分野で応募できるものをぱっと上げると Pappalardo Fellowship (MIT, 物理分野) Miller Research Fellowship (UC Berkeley, 基礎研究全般) Kavli Institute at Cornell Postdoctoral Fellowships (Cornell, ナノサイエンス) Materials Science Postdoctoral Fellowship (Princeton, 材料科学) Elings Prize Fellowship (UC Santa Barbara, ナノサイエンス) 地域・国単位だと例えば Marie Skłodowska-Curie Fellowship (ヨーロッパ) Banting Postdoctoral Fellowships (カナダ) などがある。 要求される応募書類 photo by Annie Spratt on Unsplash...

September 8, 2021

Kaggle:SETIコンペ参加記(ソロ銅:71th/768 teams)

SETI Breakthrough Listen - E.T. Signal Searchという Kaggle の画像分類コンペに参加しました。 結果 774 チーム中 74 位でソロ銅でした。 コンペの概要 Overview のページには In this competition, use your data science skills to help identify anomalous signals in scans of Breakthrough Listen targets. Because there are no confirmed examples of alien signals to use to train machine learning algorithms, the team included some simulated signals (that they call “needles”) in the haystack of data from the telescope....

August 19, 2021