HPC kümeleriyle çalışma


11

Üniversitemde bir HPC bilgi işlem kümemiz var. Kümeyi sınıflandırıcıları eğitmek için kullanıyorum vb. Yani, genellikle, (örneğin python scikit-learn komut dosyası) kümeye bir iş göndermek için, (diğerleri arasında) gibi bir komut içeren bir Bash komut dosyası yazmak gerekir qsub script.py.

Ancak, bu süreci çok sinir bozucu buluyorum. Genellikle ne olur benim laptop python komut dosyası yazmak ve sonra sunucuya oturum ve SVN deposunu güncellemek, bu yüzden orada aynı python komut dosyası olsun. Sonra bash betiğini yazabilir veya düzenleyebilirim, böylece bash betiğini çalıştırabilirim.

Gördüğünüz gibi, bu gerçekten sinir bozucu çünkü python betiği için her küçük güncelleme için, bilgi işlem kümesinde yürütülmesi için birçok adım yapmam gerekiyor. Tabii ki verileri sunucuya koyup sunucudaki veri kümelerinin yolunu kullanmam gerektiğinde görev daha da karmaşıklaşıyor.

Eminim buradaki birçok insan veri bilimi görevleri için bilgi işlem kümeleri kullanıyor. İşleri kümelere göndermeyi nasıl başardığınızı bilmek istiyorum.


1
Ah, dağıtım sevinçleri ... dağıtılmış sistemlerin sevinçleri ile geliştirildi :)
logc

Yanıtlar:


5

Şebeke yöneticinizden yerel makinenizi bir "ana bilgisayar gönder" olarak eklemesini isteyin ve SGE'yi (kullandığınızı varsaydığımızı, aslında söylemediğinizi) yüklemesini isteyin, böylece qsubmakinenizden yapabilirsiniz .

VEYA....

Emacs kullanın, ardından emacs'ın "tramp" ssh-bağlantı özellikleri aracılığıyla HPC'nizde düzenleme yapabilir ve başka bir emacs penceresinde bir kabuğu açık tutabilirsiniz. Hangi düzenleyiciyi / işletim sistemini kullanmak istediğinizi söylemezsiniz. Emac'ları bir dosyayı iki yere kaydedecek şekilde bile yapılandırabilirsiniz, böylece testleri çalıştırmak için yerel makinenize ve büyük işler için aynı anda HPC dosya sistemine kaydedebilirsiniz.


4

Dosyayı yerel bir makineden kümelerdeki bilgi işlem düğümlerine kopyalama yükünü hafifletmek için birçok çözüm vardır. Basit bir yaklaşım, clusterssh (cssh) gibi kümedeki makinelere çoklu erişime izin veren bir arabirim kullanmaktır . Bir dizi terminal ekranıyla (her biri kümedeki farklı bir makineye ssh bağlantısı) aynı anda birden çok makineye komut yazmanıza olanak tanır.

Kümeniz qsubayarlanmış gibi göründüğünden , sorununuz verileri makinelerde çoğaltmakla ilişkili olabilir (her düğümde bir komut çalıştırmak dışında). Bu nedenle, bu noktayı ele almak için bir scpkomut dosyası yazabilir , kümedeki her düğüme ve nesnelerden bir şeyler kopyalayabilirsiniz (bu, SVN ile daha iyi ele alınır) veya bir NFS oluşturabilirsiniz. Bu, verilere basit ve şeffaf bir erişim sağlar ve ayrıca gereksiz verilerin çoğaltılması ihtiyacını azaltır.

Örneğin, bir düğüme erişebilir, verileri bu yere kopyalayabilir ve ağ iletişimi aracılığıyla verileri uzaktan kullanabilirsiniz . NFS'nin nasıl kurulacağını bilmiyorum, ancak buna zaten erişiminiz var (ana klasörünüz eriştiğiniz makineler arasında aynı ise). Ardından, komut dosyaları ve veriler tek bir yere gönderilebilir ve daha sonra başkalarından erişilebilir. Bu, daha şeffaf / anlaşılır olması dışında SVN yaklaşımına benzer.


4

Kaynak sürüm deposu kullanma yaklaşımınız iyi bir yaklaşımdır ve aslında küme üzerinde çalışmanıza ve ardından her şeyi geri kopyalamanıza olanak tanır.

Kendinizi dizüstü bilgisayarınızdaki Python komut dosyanızda küçük düzenlemeler yapıyor, ardından kümedeki SVN dizininizi güncelliyorsanız, neden doğrudan küme ön ucunda çalışmıyorsunuz, tüm gerekli küçük düzenlemeleri yapıyorsunuz ve günün sonunda, orada her şey ve dizüstü bilgisayarınızda güncelleme?

İhtiyacınız olan tek şey oradaki ortama alışmak (OS, editör, vb.) Veya kendi ortamınızı kurmak (genellikle ev dizinime Vim , Tmux vb. En son sürümünü uygun dotfiles ile yüklüyorum. orada.)

Ayrıca, boyut izin veriyorsa verilerinizi ve hatta ara sonuçlarınızı sürümlendirebilirsiniz. Depolarım genellikle kod, veri (orijinal ve temizlenmiş sürümler), belgeler ve yayınlanacak kağıt kaynakları (lateks) içerir

Son olarak, komut dosyalarını el ile değiştirmekten kaçınmak için iş gönderiminizi komut dosyası oluşturabilirsiniz. qsubstdin'den bir komut dosyası kabul eder ve ayrıca tüm #$yorumları komut satırı argümanları olarak kabul eder .


3

Sorunuzun ifadesinden, yerel bir makineniz ve iki dosyayı güncellediğiniz uzak bir makineniz olduğunu varsayıyorum - bir Python komut dosyası ve bir Bash komut dosyası. Her iki dosya da SVN denetimindedir ve her iki makine de aynı SVN sunucusuna erişebilir.

Şebeke sisteminize özgü herhangi bir tavsiyem yok, ancak herhangi bir dağıtım için önemli bulduğum bazı genel noktaları listeleyeyim.

Üretim değişikliklerini yapılandırma değişiklikleriyle sınırlı tutun . "Sunucuda veri kümelerinin yolunu kullanmanız" gerektiğini yazarsınız; Bu bana Python betiğinizin içine kodlanmış yolları olduğu gibi geliyor. Bu iyi bir fikir değildir, çünkü komut dosyasını taşıdığınız diğer tüm makinelerde bu yolları değiştirmeniz gerekecektir. Bu değişiklikleri SVN'ye geri yüklerseniz, yerel makinenizde uzak yollara sahip olacaksınız ve devam edeceksiniz ... (Sadece yollar değil, şifreler de varsa? SVN'de üretim şifreleri olmamalıdır? sunucusu.)

Bu nedenle, yolları ve diğer kurulum bilgilerini bir .inidosyada saklayın ve okumak için ConfigParser'ı kullanın veya bir .jsondosya ve json modülünü kullanın . Her ikisi de SVN denetimi olmadan dosyanın bir kopyasını yerel olarak ve bir kopyasını aynı yol altında tutun ve Python komut dosyasında bu yapılandırma dosyasının yolunu saklayın (veya her ikisini de tutamazsanız komut satırından alın) aynı yol altındaki yapılandırmalar).

Yapılandırmayı olabildiğince küçük tutun . Herhangi bir yapılandırma uygulamanızın "hareketli bir parçasıdır" ve herhangi bir sistem hareketli parçaları ne kadar azsa o kadar sağlamdır. Konfigürasyona ait bir şeyin iyi bir göstergesi, kodu her taşıdığınızda tam olarak düzenlemeniz gerektiğidir; düzenlemeye gerek olmayan şeyler kodda sabit olarak kalabilir.

Dağıtımınızı otomatikleştirin . Bunu yerel makinenizde bir Bash betiği ile yapabilirsiniz; Eğer unutmayın uzak makinede herhangi bir komutu çalıştırmak yoluyla ssh. Örneğin:

svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev

## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'

Bunun çalışması için, yerel ve uzak makineniz arasında ayarlanmış, genel / özel anahtarlara dayalı, şifresiz bir oturum açmanız gerekir .

Bundan daha fazlasına ihtiyacınız varsa, Python's Fabric'i veya üst düzey mutfağı kullanmayı düşünebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.