SON DAKİKA

Nvdia

NVIDIA Çoklu İşlem Servisi ile OpenMM Moleküler Dinamikler Verimliliğini Artırma

Moleküler dinamik (MD) simülasyonları, atomik etkileşimleri zaman içinde modelleyerek önemli hesaplama gücü gerektirir. Ancak, birçok simülasyon, 400 K atomdan daha küçük sistem boyutlarına sahip olduğundan, modern GPU’ları‘nın potansiyelinden tam olarak faydalanılamaz ve bu da bazı işlem gücünün boşa gitmesine yol açar. GPU verimliliğini artırmak ve üretkenliği geliştirmek için, NVIDIA Çoklu Süreç Hizmeti (MPS) kullanarak aynı GPU üzerinde birden fazla simülasyon yürütmek etkili bir çözüm olabilir.

Bu yazıda, MPS’nin arka planı, nasıl etkinleştirileceği ve performans artışı ile ilgili ölçümler ele alınacak. Ayrıca, OpenMM simülasyon motorunu ve çerçevesini örnek göstererek yaygın kullanım senaryolarına da yer verilecektir.

MPS Nedir?

MPS, CUDA Uygulama Programlama Arayüzü (API) için alternatif, ikili uyumlu bir uygulamadır. Birden fazla sürecin GPUyu daha verimli şekilde paylaşmasını sağlar. Böylece, bağlam değiştirme maliyetlerini azaltarak genel verimliliği arttırır. Süreçlerin tek bir set çizelgeleme kaynağını paylaşması, bağlam değiştirirken GPU’dan kaynakların çıkartılıp geri yüklenmesi gerekliliğini ortadan kaldırır.

NVIDIA’nın Volta GPU neslinden başlayarak, MPS, farklı süreçlerin karnellerinin eş zamanlı çalışmasına da olanak tanır. Bu durum, bireysel süreçlerin GPU’yu tam olarak kullanamadığı durumlarda oldukça faydalıdır. MPS, Volta nesli ve sonrasındaki bütün NVIDIA GPU’ları tarafından desteklenmektedir.

MPS’nin sağladığı en önemli avantajlardan biri, normal kullanıcı yetkileriyle başlatılabilmesidir. MPS’yi etkinleştirmek ve devre dışı bırakmak için aşağıdaki kod kullanılır:

nvidia-cuda-mps-control -d # MPS'yi etkinleştirir
echo quit | nvidia-cuda-mps-control # MPS'yi devre dışı bırakır

Aynı GPU üzerinde birden fazla MD simülasyonu çalıştırmak için, her biri ayrı birer süreç olarak sim.py‘yi başlatın. Bir sistemde birden fazla GPU varsa, süreç için hedef GPU veya GPU’ları daha iyi kontrol etmek için CUDA_VISIBLE_DEVICES kullanabilirsiniz.

CUDA_VISIBLE_DEVICES=0 python sim1.py & 
CUDA_VISIBLE_DEVICES=0 python sim2.py & 
...

MPS etkinleştirildiğinde, her simülasyon biraz yavaşlayabilir; ancak birden fazla simülasyonu paralel olarak çalıştırabileceğiniz için toplam üretkenlik artar.

OpenMM için Kılavuz

Bu kısa kılavuzda, OpenMM 8.2.0, CUDA 12, ve Python 3.12 kullanacağız.

Test Yapılandırması

Bu ortamı oluşturmak için, OpenMM Kurulum Kılavuzuna başvurabilirsiniz.

conda create -n openmm8.2
conda activate openmm8.2
conda install -c conda-forge openmm cuda-version=12

Kurulumdan sonra, aşağıdaki komutla testi gerçekleştirin:

python -m openmm.testInstallation

Benchmarking scriptini, OpenMM GitHub repo adresinden aldık. Aşağıdaki kod snippet’i ile aynı anda birden fazla simülasyon çalıştırdık:

NSIMS=2 # veya 1, 4, 8
for i in `seq 1 NSIMS`;
do
  python benchmark.py --platform=CUDA --test=pme --seconds=60 &
done
# test sistemleri: pme (DHFR, 23k atom), apoa1pme (92k), cellulose (409k)

MPS’nin Performans Testi

Genel olarak, sistem boyutu ne kadar küçükse, beklediğiniz performans artışı da o kadar fazla olur. Şekil 1, 2 ve 3, DHFR (23K atom), ApoA1 (92K atom) ve Selüloz (408K atom) sistemleri üzerinde MPS’nin uygulanmasının sonuçlarını gösterir. Grafiklerde, aynı GPU üzerinde birden fazla simülasyonun çalıştırılmasının ardından elde edilen toplam throughput gözlemlenmektedir.

A chart listing the aggregate simulation throughput when enabling MPS. The simulated system is DHFR, with a total system size of 23,558 atoms. It lists many NVIDIA GPUs, from A10 to H100. By running more simulations at the same time, the aggregate simulation throughput goes up.
Şekil 1. DHFR test sistemi (23,558 atom) için MPS performansı

DHFR test sistemi, üç sistemin en küçüğü olduğundan, MPS ile elde edilecek performans artışı da en yüksektir. Özellikle NVIDIA H100 Tensor Core gibi bazı GPU’lar için toplam throughput iki katına kadar çıkabilmektedir.

A chart listing the aggregate simulation throughput when enabling MPS. The simulated system is ApoA1, with a total system size of 92,236 atoms. It lists many NVIDIA GPUs, from A10 to H100. By running more simulations at the same time, the aggregate simulation throughput goes up for larger GPUs such as L40S and H100.
Şekil 2. ApoA1 test sistemi (92,236 atom) için MPS performansı
A chart listing the aggregate simulation throughput when enabling MPS. The simulated system is cellulose, with a total system size of 408,609 atoms. It lists many NVIDIA GPUs, from A10 to H100. By running more simulations at the same time, the aggregate simulation throughput goes up for the largest GPUs such as H100s.
Şekil 3. Selüloz test sistemi (408,609 atom) için MPS performansı

Selüloz benchmark sisteminde bile, MPS’nin yüksek uçlu GPU’lar için toplam throughput’u %20 daha fazla hale getirdiği gözlemlenmiştir.

CUDA_MPS_ACTIVE_THREAD_PERCENTAGE ile Daha Fazla Üretkenlik

Varsayılan olarak, MPS tüm süreçlerin GPU’nun tüm kaynaklarına erişimini sağlar. Bu, performans açısından faydalıdır çünkü simülasyonlar diğer simülasyonlar boşta kaldığında GPU kaynaklarını tam anlamıyla kullanabilir. MD simülasyonlarının kuvvet hesaplama aşaması, konum güncelleme aşamasına göre çok daha fazla paralellik sunar; bu sayede birden fazla süreç aynı anda çalıştığında, kaynaklardan daha fazla yararlanmak performansı artırır.

Ancak, birden fazla süreç eş zamanlı çalıştığından, bu genellikle gereksiz hale gelir ve performans açısından olumsuz etkiler yaratabilir. CUDA_MPS_ACTIVE_THREAD_PERCENTAGE, kullanıcılara tek bir süreç için mevcut olan maksimum iş parçacığı yüzdesini ayarlama olanağı sunar ve bu, toplam verimliliği artırmak için daha fazla kullanım sağlar.

Bu sonucu elde etmek için, kod kısmını şöyle değiştirebilirsiniz:

NSIMS=2 # veya 1, 4, 8
export CUDA_MPS_ACTIVE_THREAD_PERCENTAGE=$(( 200 / NSIMS )) 
for i in `seq 1 NSIMS`;
do
  python benchmark.py --platform=CUDA --test=pme --seconds=60 &
done
A chart listing the aggregate simulation throughput when enabling MPS and changing the environment variable CUDA_MPS_ACTIVE_THREAD_PERCENTAGE. The simulation throughput for DHFR (23,558 atoms) is further improved on L40S and H100 GPUs.
Şekil 4. CUDA_MPS_ACTIVE_THREAD_PERCENTAGE ayarının throughput’u artırması

Bu testler, 200 / MPS süreç sayısı yüzdesinin en yüksek throughput’u sağladığını göstermektedir. Bu ayar ile 8 DHFR simülasyonu için toplam throughput %15 – %25 oranında artarak, NVIDIA L40S veya NVIDIA H100 GPU üzerinde günde 5 mikro saniyeye yaklaşmıştır. Bu da, bir GPU üzerinde tek bir simülasyonun throughput’unu iki katından fazla yapmaktadır.

MPS ile OpenFE Serbest Enerji Hesaplamaları

Serbest enerji perturbasyonu (FEP) tahmini, MD simülasyonlarının en popüler uygulamalarından biridir. FEP, farklı λ pencerelerinde birden fazla simülasyon yürüten replica-exchange molecular dynamic (REMD) simülasyonlarına dayanır ve bu simülasyonlar, örneklemeyi artırmak için eş zamanlı olarak yapılandırmalar değiş tokuş eder. OpenMM ekosisteminde, OpenFreeEnergy (OpenFE) paketi, openmmtools içindeki çok durumlu uygulama protokollerini sağlar. Ancak, bu simülasyonlar OpenMM bağlam değiştirme ile yürütülür; bu da yalnızca bir simülasyonun gerçekleştirilmesine olanak tanır. Sonuç olarak, bu yöntem de GPU’ların kötü kullanılmasına sebep olur.

MPS, bu sorunu çözmek üzere kullanılabilir. OpenFE yüklendiğinde, bir FEP bacağının çalıştırılması şu komutla yapılabilir:

openfe quickrun <input> <output directory>

Aynı mantıkla, birden fazla bacağı aynı anda çalıştırabilirsiniz:

nvidia-cuda-mps-control -d # MPS'yi etkinleştirir
openfe quickrun <input1> <output directory> &
openfe quickrun <input2> <output directory> 
...

Replica exchange simülasyonlarının eşitlenme aşamasının süre ölçümü yapılmıştır; bu süreç, 12 * 100 ps simülasyonlarını içerir. Bu simülasyonlar L40S veya H100 GPU üzerinde gerçekleştirilmiştir. Üç MPS süreci kullanıldığında %36 daha yüksek throughput gözlemlenmiştir.

MPS'nin OpenFE serbest enerji perturbasyonu simülasyonları üzerindeki throughput artışı.
Şekil 5. MPS’nin OpenFE serbest enerji perturbasyonu simülasyonları üzerindeki throughput artışı

MPS ile Başlayın

MPS, çok fazla kodlama çabası gerektirmeden MD simülasyonlarının throughput’unu artıran kullanıcı dostu bir araçtır. Bu yazıda, çeşitli benchmarking sistemlerinde farklı GPU’lar üzerindeki throughput artışını inceledik. Ayrıca, CUDA_MPS_ACTIVE_THREAD_PERCENTAGE kullanarak throughput’u daha da artırmayı gözlemledik. MPS’yi OpenFE serbest enerji simülasyonlarına uygulayarak throughput artışını belirledik.

MPS hakkında daha fazla bilgi almak için NVIDIA GTC oturumunda, GPU Kullanımını Optimize Etme: MIG ve MPS’yi Anlamak başlıklı oturumunu izleyebilirsiniz. MPS uygulamanız hakkında sorularınızı NVIDIA Geliştirici CUDA forumu‘nda paylaşabilirsiniz.

OpenMM moleküler dinamik simülasyon kodu ile başlayabilmek için, OpenMM eğitimlerine göz atın.

Kaynak

Nvdia Blog

Düşüncenizi Paylaşın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgili Teknoloji Haberleri