HPCシステムズではエンジニアを募集しています。詳しくはこちらをご覧ください。
HPCシステムズのエンジニア達による技術ブログ

Tech Blog

VASP 6.4.1 : on the fly 機械学習力場

vasp 6.4.1がリリースされましたが、このバージョンで特に強化されているのが、機械学習力場の機能部分です。この機械学習力場を上手く活用すると、大変な計算時間の短縮になるので紹介します。

機械学習力場というと、「力場で計算した結果は信用出来ない」とか、「機械学習ならGPUが必要でしょ?高価なGPUは購入予定が無いので。」といった事を思われるかもしれません。力場の使用に関しては、自分が計算したい系を扱った力場で適切なものを選択するのが大変で、その選定や差異などをチェックするところでとても手間と計算リソースを消費する為、力場で計算する事で省力化可能より手間が大きくなりそうに思えるという事はあるかと思います。また、力場を機械学習で精度などを上げるにしても、機械学習の場合、多量のデータを学習時に使用する必要がある場合が多いので、実用的に処理するには高性能で高価格なGPUが必要な場合が多い事も一般的には知られています。

しかし、VASPの機械学習力場を使用する為にGPUは必要ありません。VASPの機械学習力場は、計算したい系のMD計算を実行して、その過程で力場を作成します。自分が計算したい系の為に作成された力場を使用して様々な計算に使用する訳です。その為、誰か知らない人が作った精度が分らない力場でも、似ているけど、使えるかどうか不明な系を借りてきて使用する訳でもありません。自分で自分の計算したい系の力場を作るとなると、信頼性は期待出来ると思いますが、でも、その力場を作るのに、もの凄いリソースを必要としそうなのに、GPUがいらないってどういう事?と思われるかもしれません。

実際にvaspwikiにあるチュートリアルの例を実行してみました。
https://www.vasp.at/tutorials/latest/md/part2/
このexampleでは16個のSiからなる系をNpT計算し、その計算過程で学習させて力場を作成しています。力場を作成する為には、十分長いMD計算が必要で、このexampleでは10,000イオンステップを実行しています。
ここで鍵になるのが力場の名前になっているon the flyの部分です。この学習では全てのイオンステップでab intio計算を行なう訳ではないのです。力場との誤差の閾値を越えない限りab initoステップが実行される事は無く、閾値を越えてab initoステップを実行した場合、その結果を力場に加えて力場を修正し、次のステップでは修正された力場を使用する為、ステップを重ねる度に閾値を越える可能性が低くなる事から、十分なイオンステップ、このexampleの場合は、10,000ステップを実行しても、非常に短時間で学習が終了しました

実際に学習過程のログを見てみると、
# STATUS - "critical" (4) : Errors are high, ab initio sampling and learning is enforced
STATUS 1 critical 4 T F 0 1
STATUS 2 critical 4 T F 0 2
STATUS 3 critical 4 T T 0 1
STATUS 4 critical 4 T T 0 1
STATUS 5 critical 4 T T 0 1
STATUS 6 critical 4 T T 0 1
STATUS 7 critical 4 T T 0 1
STATUS 8 critical 4 T T 0 1
STATUS 9 critical 4 T T 0 1
STATUS 10 critical 4 T T 0 1
STATUS 11 critical 4 T T 0 1
STATUS 21 critical 4 T T 0 10
STATUS 29 critical 4 T T 0 8
STATUS 186 critical 4 T T 0 157

このステップと
# STATUS - "learning" (3) : Stored configurations are used for training force field
STATUS 844 learning 3 T T 0 658
STATUS 1222 learning 3 T T 0 378
STATUS 1385 learning 3 T T 0 163
STATUS 1513 learning 3 T T 0 128
STATUS 1854 learning 3 T T 0 341
STATUS 2078 learning 3 T T 0 224
STATUS 2222 learning 3 T T 0 144
STATUS 2309 learning 3 T T 0 87
STATUS 2603 learning 3 T T 0 294
STATUS 3837 learning 3 T T 0 1234
STATUS 7354 learning 3 T T 0 3517
STATUS 8801 learning 3 T T 0 1447
STATUS 9561 learning 3 T T 0 760

このステップだけでしか、重い計算は行なっていません。
他の9973のステップは力場との誤差が閾値以下かどうかをチェックしているだけですから高速である訳です。第 2 世代インテル® Xeon® スケーラブル・プロセッサーで4並列で実行したところ、7分程度で学習は終了してしまいました。

この学習の部分はVASP 6.4系で強化された部分で、VASP 6.3.2で同じ事を実行した場合、8分半ほど掛っていたので、2割くらい早くなっていて、かなり強化された事が分ります。

では、この力場がどのくらい第一原理で計算した場合と異なるかをexampleで用意されているDFTの結果と比較してみます。学習して作成された力場を使用して、格子スケーリング係数を振って、13点、計算した結果と比較したのが次のグラフです。

10分程度で作ったにしては悪くないように思います。10,000イオンステップで10分以下であれば、イオンステップを1〜2桁増やしても実行可能な範囲だと思いますし、もっと複雑な系でも、実用的な計算時間で作成可能かと思います。

では、その力場を使った場合、どれだけ効果があるか、NpTを実際に計算する際にイオンステップを10,000として実行した場合と、力場を使用して計算した場合とを比較すると、力場を使用するとDFT計算の1%以下の時間で計算が終了します。力場を作成する学習の時間を加えても、3%以下の計算時間で終了してしまいます

これくらいの差があれば、使ってみる価値があるのではないでしょうか?

この機械学習力場はVASP6.3.0以降で使用可能ですが、上記したように、6.4.1でかなり強化されていますので、この機械学習力場を使用するのであれば、VASP6.4.1をお勧めします