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

Python : hashlibを使って、ハッシュ値を求める

ハッシュ値を求める import hashlib file_name = "important_file.dat" # MD5 ハッシュを生成する hs = hashlib.md5(file_name.encode()).hexdigest() # SHA224 ハッシュを生成する hs = hashlib.sha224(file_name.encode()).hexdigest() 自走プログラマー~Python の先輩が教えるプロジェクト開発のベストプラクティス 120の中でファイル名からハッシュ値を求め、そのハッシュ値の頭 3 文字を中間ディレクトリにして、1つのディレクトリにファイルを集中させないという手法が紹介されていた。 例 file_name = "important_file.dat" hs = hashlib.md5(file_name.encode()).hexdigest() file_path = f"dir_name/{hs[:3]}/{file_name}" 参考

March 12, 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

Pythonで並列処理 : MPIREの使い方

Python では joblib や concurrent.futures などで簡単にマルチプロセスできるが、“MultiProcessing Is Really Easy"という名の MPIRE というライブラリを見つけたので備忘録として残しておく。この記事によると、特定の場合では joblib や concurrent.futures よりも性能が良いらしい。 MPIRE のインストール pip install mpire MPIRE の使い方 from mpire import WorkerPool def time_consuming_function(param): return None with WorkerPool(n_jobs=8) as pool: results = pool.map_unordered(time_consuming_function, interator, progress_bar=True) 参考

March 9, 2022

Hugo : PaperModのテーマでjavascriptを非同期で読み込んで高速化

この web サイトは PaperMod というテンプレートから作成しているのが、シンタックスハイライトをいい感じにする Prism.js を導入したらPageSpeed Insightsのパフォーマンスが悪くなったので改善メモ。 Javascript の読み込み時に defer を導入 Before モバイルでのパフォーマンスは、40-50 くらいだった。 <script src="{{ .Site.BaseURL }}/js/prism.js"></script> After モバイルでのパフォーマンスが、65-75 くらいに改善した。 <script type="text/javascript" defer src="{{ .Site.BaseURL }}/js/prism.js" ></script> 余談 ちなみに PaperMod はデフォルトでパフォーマンスが90-99くらい出る超高速なテンプレートである。(Prism.js の読み込みで大幅に速度が低下した。) 上の javascript の読み込み部分をコメントアウトするとパフォーマンスは 90 以上まで戻る(笑) 参考

March 3, 2022