おいも貴婦人ブログ

生物系博士課程満期退学をしたAIエンジニアのブログ。

PythonとDeep learningとそして少しRustを...。

2020/02/05追記 下の記事は、Pythonを使うとGPU使用率が低くなってしまい、計算速度が遅いという話をしています。しかし、rustがデータ全てをgpuに移動させていることや、pytorchのtorch.backends.cudnn.benchmark=Trueを指定しいないことなどから再実験しま…

Computational Protein Design with Deep Learning Neural Networks

論文要約 タンパク質のアミノ酸種類予測タスク(半教師ありみたい) 最高精度38.3% 先行研究より3%アップ www.nature.com

Macのemacsでpdfをビューできない時。

まずは、emacsにpdf-toolsをインストールするために以下のコマンドで必要なソフトウェアをインストールする。 $ brew install automake poppler インストールが終われば、emacsを開き、 M-x package-list-packages を入力し、pdf-toolsをインストールする。…

Tensorflowでのモデルの定義の仕方

これくらいでいいんじゃないかと思っている。 import tensorlfow as tf class Model(object): def __init__(self): pass def build(self): pass def __call__(self, x): pass

gitでタグをcheckout

毎回毎回調べているので書いておきます。 $ git tag -l でタグの一覧を取得。 $ git checkout -b tag_name refs/tags/v0.0.1

続*6:2次元イジングモデル

現在、CUDAで2次元イジングモデルのプログラムを書いています。下記のgifは、プログラミングミスの結果ですが、面白かったので載せておきます。なんだかライフゲームみたいです。

続*5:2次元イジングモデル

前回、紹介しましたCheckerboard decompositionをC言語で実装しました。マジックナンバーがふんだんに盛り込まれています。(8,3)でCheckerboard decompositionしたのは、(0,1),(0,2),(0,3),(1,0),...,のように行列の要素を並べた時に、奇数番目と偶数番目に…

続*4:2次元イジングモデル

2次元イジングモデルでの各ステップでのアップデート方法に致命的な部分がありました...。 今までの2次元イジングモデルのアップデート方法(1) 2次元上のスピンをランダムに一つ選び、スピンを反転させる。 前状態とのエネルギー差を計算する。 メトロポ…

続*3:2次元イジングモデル

2015/11/13修正 def calcDeltaEの部分 return -2*dE def MCのエネルギー差の足し算部分 E+=dE 修正済みのコードは文中。 本文 今までのプログラムは、エネルギーを計算する際に全ての要素に対してエネルギーの再計算を行っていました。しかしイジングの場合…

続々:2次元イジングモデル

CUDAで下手くそなプログラミングを書いてみました。対象は前回から引き続き2次元イジングモデルです。2次元の行列サイズは1024x1024と2048x2048、ループ回数は1000です。コード中のMT.hは乱数を生成するためにメルセンヌツイスターを使用しているからです。…

続:2次元イジングモデル

前回の2次元イジングモデルのコードをCで書きなおしてみました。unixの標準コマンドtimeを使って、openmpありとなしの実行時間を計算してみます。2次元の行列サイズは1024x1024、ループ回数は1000です。コード中のMT.hは乱数を生成するためにメルセンヌツイ…

2次元イジングモデル

ホップフィールドネットワークのプログラムを書いたので、2次元イジングモデルのプログラムも書いてみました。イジングモデルは磁性体を表したモデルです。磁性体は磁石だと考えてもらって結構だと思います。磁石は、熱を与えるとその磁性を失います(つまり…

続:ホップフィールド(Hopfield Network)

大昔にHopfield Networks(HN:この略し方に一般性はありません。)についてのPythonプログラムを書いたが、あまりにも酷かったので書きなおしてみました。HNは連想記憶モデル、言い換えると、教師あり型のパターン認識方法の一種だと考えられます。教師あり型…

Gromacs5.0.6のdistanceを使って、特定のCa原子間距離を計算する

Caの原子番号を取得する gmx make_ndx -f filename.gro コマンドライン上で3のCa選ぶ。quitすると、index.ndxが出力される。 そのファイルの[ C-alpha ]の部分だけを残し、知りたい原子間のみを残す(偶数個でないとダメ)。以下は例 [ C-alpha ] 1 2 原子間の…

素人によるCUDAのお勉強。7

参考にしている本の翻訳版が出てました…。高い...。でも買う価値は大いにあると思います。CUDA C プロフェッショナル プログラミング (impress top gear)作者: John Cheng,Max Grossman,Ty McKercher,森野慎也,株式会社クイープ出版社/メーカー: インプレス…

素人によるCUDAのお勉強。6

cudaプログラミングの時間の計測。sys/time.hのgettimeofdayを使って、CPU上でGPUの実行時間を計測します。グリッドの次元に上限があるため #include <cuda_runtime.h> #include <stdio.h> #include <sys/time.h> #define CHECK(call)\ {\ const cudaError_t error = call;\ if (error != cudaSucc</sys/time.h></stdio.h></cuda_runtime.h>…

素人によるCUDAのお勉強。5

簡単な例としてベクトルの足し算を行います。CPUで同じ計算を実行し、その結果とGPUで計算をした結果があっているか確かめます。 #include <cuda_runtime.h> #include <stdio.h> #define CHECK(call)\ {\ const cudaError_t error = call;\ if (error != cudaSuccess)\ {\ printf("Err</stdio.h></cuda_runtime.h>…

素人によるCUDAのお勉強。4

同期について cudaでカーネル関数を実行している間は、同期を取らない限り、グリッド上で実行されているスレッドが終了しているとは限りません。明示的に同期を取るならば以下の関数があります。 cudaError_t cudaDeviceSynchronize(void); 一方で、暗に同期…

素人によるCUDAのお勉強。3

blockサイズをhost側から制御する方法。 include <cuda_runtime.h> #include <stdio.h> int main(int argc, char **argv){ int nElem = 1024; dim3 block (1024); dim3 grid ((nElem+block.x-1)/block.x); printf("grid.x %d block.x %d \n",grid.x,block.x); block.x = 512; grid.x =</stdio.h></cuda_runtime.h>…

覚えられない単語。ステガノグラフィ

ステガノグラフィが覚えられません。ですので、接頭辞(prefix)を調べてみました。その前に簡単な説明。 クリプトグラフィ(cryptography) 暗号化すること、データを読めないようにする。 ステガノグラフィ(steganography) データを隠してしまうこと。例:電子…

非リボソームペプチド

セントラルドグマの第2の異端者? 細胞の中のタンパク質は、DNA->RNA->タンパク質の順で合成されるのが普通です。その流れを一般的にセントラルドグマ(根本となる概念)といい、このRNA->タンパク質の過程で重要となるのがリボソームです。リボソームは、D…

素人によるCUDAのお勉強。2

CUDAプログラミングを始める前のお話 CUDAのプログラムはGPU上でスタンドアロンで実行されるのではなく、CPUとGPUの両方を使っていることを念頭に置く必要がある。(それゆえ、CUDAプログラミングでは、GPUのアーキテクチャを深く理解しないといけない。)そ…

素人によるCUDAのお勉強。

どうして並列計算をするのか 現在のCPUのクロック周波数は、ほぼ頭打ちです。クロック周波数を増やそうとすると、発熱が起こり、その熱を処理できないためだそうです。では、これからは計算速度をどのように向上させるのかというと、その答えの一つが並列化…

C言語でMPIを使ってみよう。

MPIを勉強していきます。理研や大学の講習会に出たことがあるのですが、自分で凝ったMPIのプログラムを書くことがないので忘れてしまいました。余談ですが、MPIは主にノード間並列をするときに用いる技術です。もちろんノード内の並列も可能ですが、そのコー…

Pythonのmultiprocessingを使って、行列の積を計算しよう。

multiprocessingの使い方を学ぶために、行列の積を計算しました。結果は、絶望的に遅いです。そもそもプログラムに問題があるかも知れません。60x60の行列の積でも数秒かかってしまいます。 以下、コードを部分的に説明していきます。 必要なモジュールのイ…

gmxとMDAnalysisのrmsfの計算結果が合いません...。

この間、紹介したMDanalysisを使って、RMSFを求めてみたところ、やけに大きな値が出てたのでずっと疑問に思っていました。念のために gmx rmsf -f trajectory.file -s toplogy.file で計算した結果と比べてみると明らかに異なってました(10倍くらい...。)(…

Gromacsの解析にMDAnalysisを使ってみよう。

gromacsの計算結果から、MDAnalysisを使ってRMSFを求めてみる。非常に簡単!!! #!/usr/bin/env python import MDAnalysis from MDAnalysis.analysis.rms import RMSF topology='md_0_1.gro' ## PSF,CRD,PDB,GRO trajectory='md_0_1.trr' ## DCD,XTC/TRR unive…

Djangoでアプリを作成する際のバグについて

django-admin.py startapp mysite を実行して、以下のようなエラーが出る場合。 Traceback (most recent call last): File "/home/vagrant/.virtualenvs/py27/bin/django-admin.py", line 5, in <module> management.execute_from_command_line() File "/home/vagran</module>…

easy_installをユーザーモードで使う方法。

wget https://bootstrap.pypa.io/ez_setup.py -O - | python - --user これで、PATHに /home/name/.local/bin を追加するだけ。 ## 使い方 pipをインストールする export PYTHONPATH="/home/name/.local/lib/python3.5/site-packages" easy_install-3.5 -d /…

フィボナッチ数列をマルチプロセッシングで計算する。

前回は、threadingモジュールを使ってフィボナッチ数列を計算しました。今回は、multiprocessingを使いたいと思います。 #!/usr/bin/env python3 import sys, time, random, re, requests import concurrent.futures from multiprocessing import Process, c…