Bölüm 6: Hello Config¶
Yapay zeka destekli çeviri - daha fazla bilgi ve iyileştirme önerileri
Tüm oynatma listesini Nextflow YouTube kanalında görün.
Video metni burada mevcuttur.
Bu bölümde, Nextflow pipeline'ınızın yapılandırmasını nasıl kuracağınızı ve yöneteceğinizi keşfedeceğiz; böylece iş akışı kodunun kendisinde tek bir satır bile değiştirmeden davranışını özelleştirebilecek, farklı ortamlara uyarlayabilecek ve kaynak kullanımını optimize edebileceksiniz.
Bunu yapmanın birden fazla yolu vardır; bunlar birlikte kullanılabilir ve yapılandırma belgelerinde açıklanan öncelik sırasına göre yorumlanır.
Kursun bu bölümünde, size en basit ve en yaygın yapılandırma dosyası mekanizmasını göstereceğiz: Bölüm 5: Hello Containers'da zaten karşılaştığınız nextflow.config dosyası.
Süreç yönergeleri, yürütücüler, profiller ve parametre dosyaları gibi Nextflow yapılandırmasının temel bileşenlerini ele alacağız. Bu yapılandırma seçeneklerini etkili bir şekilde kullanmayı öğrenerek, pipeline'larınızın esnekliğini, ölçeklenebilirliğini ve performansını artırabilirsiniz.
Bu bölümden nasıl başlanır
Kursun bu bölümü, Hello Nextflow kursunun 1-5. Bölümlerini tamamladığınızı ve eksiksiz çalışan bir pipeline'a sahip olduğunuzu varsayar.
Kursa bu noktadan başlıyorsanız, modules dizinini ve nextflow.config dosyasını çözümlerden kopyalamanız gerekecektir:
nextflow.config dosyası, Docker konteynerlerinin kullanımını etkinleştiren docker.enabled = true satırını içerir.
Hello pipeline'ına aşina değilseniz veya hatırlatmaya ihtiyacınız varsa, bu bilgi sayfasına bakın.
0. Isınma: hello-config.nf dosyasını çalıştırın¶
Başlangıç noktası olarak hello-config.nf iş akışı betiğini kullanacağız.
Bu eğitim kursunun 5. Bölümünde üretilen betiğe eşdeğerdir, ancak çıktı hedeflerini değiştirdik:
| hello-config.nf | |
|---|---|
Her şeyin çalıştığından emin olmak için, herhangi bir değişiklik yapmadan önce betiği bir kez çalıştırın:
Komut çıktısı
Daha önce olduğu gibi, çıktı dosyalarını output bloğunda belirtilen dizinde (results/hello_config/) bulacaksınız.
Dizin içeriği
Son ASCII sanat çıktısı, results/hello_config/ dizininde cowpy-COLLECTED-batch-output.txt adı altındadır.
Dosya içeriği
_________
/ HOLà \
| HELLO |
\ BONJOUR /
---------
\ ,+*^^*+___+++_
\ ,*^^^^ )
\ _+* ^**+_
\ +^ _ _++*+_+++_, )
_+^^*+_ ( ,+*^ ^ \+_ )
{ ) ( ,( ,_+--+--, ^) ^\
{ (\@) } f ,( ,+-^ __*_*_ ^^\_ ^\ )
{:;-/ (_+*-+^^^^^+*+*<_ _++_)_ ) ) /
( / ( ( ,___ ^*+_+* ) < < \
U _/ ) *--< ) ^\-----++__) ) ) )
( ) _(^)^^)) ) )\^^^^^))^*+/ / /
( / (_))_^)) ) ) ))^^^^^))^^^)__/ +^^
( ,/ (^))^)) ) ) ))^^^^^^^))^^) _)
*+__+* (_))^) ) ) ))^^^^^^))^^^^^)____*^
\ \_)^)_)) ))^^^^^^^^^^))^^^^)
(_ ^\__^^^^^^^^^^^^))^^^^^^^)
^\___ ^\__^^^^^^))^^^^^^^^)\\
^^^^^\uuu/^^\uuu/^^^^\^\^\^\^\^\^\^\
___) >____) >___ ^\_\_\_\_\_\_\)
^^^//\\_^^//\\_^ ^(\_\_\_\)
^^^ ^^ ^^^ ^
Bu sizin için çalıştıysa, pipeline'larınızı nasıl yapılandıracağınızı öğrenmeye hazırsınız.
1. İş akışı girdi parametrelerini yönetin¶
İş akışı betiğinin kendisinde varsayılan değerler ayarlanmış olarak, komut satırı üzerinden birkaç parametre değerini kabul edecek şekilde kurulmuş olan bir yapılandırma unsuruyla başlayacağız. Ancak, bu varsayılanları komut satırında parametreler belirtmek veya orijinal betik dosyasını değiştirmek zorunda kalmadan geçersiz kılmak isteyebilirsiniz.
Bunu yapmanın birden fazla yolu vardır; size çok yaygın olarak kullanılan üç temel yolu göstereceğiz.
1.1. Varsayılan değerleri nextflow.config dosyasına taşıyın¶
Bu en basit yaklaşımdır, ancak ana nextflow.config dosyası her çalıştırma için düzenlemek isteyeceğiniz bir şey olmadığından muhtemelen en az esnektir.
Ancak, iş akışında parametreleri bildirme (ki bu kesinlikle oraya aittir) ile varsayılan değerler sağlama (bunlar bir yapılandırma dosyasında daha uygun) kaygılarını ayırma avantajına sahiptir.
Bunu iki adımda yapalım.
1.1.1. Yapılandırma dosyasında bir params bloğu oluşturun¶
nextflow.config dosyasında aşağıdaki kod değişikliklerini yapın:
params bloğunu iş akışından yapılandırma dosyasına basitçe kopyalamadığımıza dikkat edin.
Sözdizimi biraz farklıdır.
İş akışı dosyasında bunlar tipli bildirimlerdir.
Yapılandırmada bunlar değer atamalarıdır.
Teknik olarak, bu iş akışı dosyasında hala belirtilen varsayılan değerleri geçersiz kılmak için yeterlidir. Örneğin karakteri değiştirebilir ve yapılandırma dosyasında ayarlanan değerin iş akışı dosyasında ayarlanan değeri geçersiz kıldığından emin olmak için iş akışını çalıştırabilirsiniz.
Ancak yapılandırmayı tamamen yapılandırma dosyasına taşıma ruhuyla, bu değerleri iş akışı dosyasından tamamen kaldıralım.
1.1.2. İş akışı dosyasındaki params bloğundan değerleri kaldırın¶
hello-config.nf iş akışı dosyasında aşağıdaki kod değişikliklerini yapın:
Artık iş akışı dosyasının kendisi bu parametreler için herhangi bir varsayılan değer ayarlamıyor.
1.1.3. Pipeline'ı çalıştırın¶
Doğru çalıştığını test edelim.
Komut çıktısı
Bu hala daha önce olduğu gibi aynı çıktıyı üretir.
Son ASCII sanat çıktısı, daha önce olduğu gibi results/hello_config/ dizininde cowpy-COLLECTED-batch-output.txt adı altındadır.
Dosya içeriği
_________
/ HOLà \
| HELLO |
\ BONJOUR /
---------
\ ,+*^^*+___+++_
\ ,*^^^^ )
\ _+* ^**+_
\ +^ _ _++*+_+++_, )
_+^^*+_ ( ,+*^ ^ \+_ )
{ ) ( ,( ,_+--+--, ^) ^\
{ (\@) } f ,( ,+-^ __*_*_ ^^\_ ^\ )
{:;-/ (_+*-+^^^^^+*+*<_ _++_)_ ) ) /
( / ( ( ,___ ^*+_+* ) < < \
U _/ ) *--< ) ^\-----++__) ) ) )
( ) _(^)^^)) ) )\^^^^^))^*+/ / /
( / (_))_^)) ) ) ))^^^^^))^^^)__/ +^^
( ,/ (^))^)) ) ) ))^^^^^^^))^^) _)
*+__+* (_))^) ) ) ))^^^^^^))^^^^^)____*^
\ \_)^)_)) ))^^^^^^^^^^))^^^^)
(_ ^\__^^^^^^^^^^^^))^^^^^^^)
^\___ ^\__^^^^^^))^^^^^^^^)\\
^^^^^\uuu/^^\uuu/^^^^\^\^\^\^\^\^\^\
___) >____) >___ ^\_\_\_\_\_\_\)
^^^//\\_^^//\\_^ ^(\_\_\_\)
^^^ ^^ ^^^ ^
İşlevsel olarak, bu taşıma hiçbir şeyi değiştirmedi, ancak kavramsal olarak varsayılan değerlerin yapılandırma dosyasında ayarlanması biraz daha temiz.
1.2. Çalıştırmaya özgü bir yapılandırma dosyası kullanın¶
Bu harika, ancak bazen ana yapılandırma dosyasını karıştırmadan farklı varsayılan değerlerle bazı geçici deneyler yapmak isteyebilirsiniz.
Bunu, deneyler için çalışma dizini olarak kullanacağınız bir alt dizinde yeni bir nextflow.config dosyası oluşturarak yapabilirsiniz.
1.2.1. Boş bir yapılandırmayla çalışma dizini oluşturun¶
Yeni bir dizin oluşturarak ve içine girerek başlayalım:
Ardından, bu dizinde boş bir yapılandırma dosyası oluşturun:
Bu boş bir dosya üretir.
1.2.2. Deneysel yapılandırmayı kurun¶
Şimdi yeni dosyayı açın ve özelleştirmek istediğiniz parametreleri ekleyin:
| tux-run/nextflow.config | |
|---|---|
Girdi dosyasının yolunun dizin yapısını yansıtması gerektiğine dikkat edin.
1.2.3. Pipeline'ı çalıştırın¶
Artık pipeline'ımızı yeni çalışma dizinimizin içinden çalıştırabiliriz. Yolu buna göre uyarladığınızdan emin olun!
Komut çıktısı
Bu, tux-run/work/ ve tux-run/results/ dahil olmak üzere tux-run/ altında yeni bir dizin seti oluşturacaktır.
Bu çalıştırmada, Nextflow mevcut dizinimizdeki nextflow.config dosyasını pipeline'ın kök dizinindeki nextflow.config ile birleştirir ve böylece varsayılan karakteri (turkey) tux karakteriyle geçersiz kılar.
Son çıktı dosyası, selamlamaları söyleyen tux karakterini içermelidir.
Dosya içeriği
İşte bu kadar; artık 'normal' yapılandırmanızı değiştirmeden deney yapmak için bir alanınız var.
Şimdi parametre değerlerini ayarlamanın başka bir kullanışlı yoluna bakalım.
1.3. Bir parametre dosyası kullanın¶
Alt dizin yaklaşımı deney yapmak için harika çalışır, ancak biraz kurulum gerektirir ve yolları buna göre uyarlamanızı gerektirir. Pipeline'ınızı belirli bir değer seti ile çalıştırmak istediğinizde veya başka birinin bunu minimum çabayla yapmasını sağlamak istediğinizde daha basit bir yaklaşım vardır.
Nextflow, YAML veya JSON formatında bir parametre dosyası aracılığıyla parametreleri belirtmemize olanak tanır; bu da alternatif varsayılan değer setlerini yönetmeyi ve dağıtmayı, örneğin çalıştırmaya özgü parametre değerlerini çok kullanışlı hale getirir.
1.3.1. Örnek parametre dosyasını inceleyin¶
Bunu göstermek için, mevcut dizinde test-params.yaml adlı bir örnek parametre dosyası sağlıyoruz:
Bu parametre dosyası, belirtmek istediğimiz her girdi için bir anahtar-değer çifti içerir.
Sözdizimini yapılandırma dosyasıyla karşılaştırırsanız, eşittir işaretleri (=) yerine iki nokta üst üste (:) kullanımına dikkat edin.
Yapılandırma dosyası Groovy'de yazılırken, parametre dosyası YAML'de yazılır.
Bilgi
Ayrıca örnek olarak parametre dosyasının JSON sürümünü de sağlıyoruz ancak burada bununla çalıştırmayacağız. Bunu kendi başınıza denemekten çekinmeyin.
1.3.2. Pipeline'ı çalıştırın¶
İş akışını bu parametre dosyasıyla çalıştırmak için, temel komuta basitçe -params-file <dosyaadı> ekleyin.
Komut çıktısı
Son çıktı dosyası, selamlamaları söyleyen stegosaurus karakterini içermelidir.
Dosya içeriği
_________
/ HELLO \
| HOLà |
\ BONJOUR /
---------
\ . .
\ / `. .' "
\ .---. < > < > .---.
\ | \ \ - ~ ~ - / / |
_____ ..-~ ~-..-~
| | \~~~\.' `./~~~/
--------- \__/ \__/
.' O \ / / \ "
(_____, `._.' | } \/~~~/
`----. / } | / \__/
`-. | / | / `. ,~~|
~-.__| /_ - ~ ^| /- _ `..-'
| / | / ~-. `-. _ _ _
|_____| |_____| ~ - . _ _ _ _ _>
Yalnızca birkaç parametre belirtmeniz gerektiğinde bir parametre dosyası kullanmak aşırıya kaçmış gibi görünebilir, ancak bazı pipeline'lar düzinelerce parametre bekler. Bu durumlarda, bir parametre dosyası kullanmak, çalışma zamanında devasa komut satırları yazmak ve iş akışı betiğini değiştirmek zorunda kalmadan parametre değerleri sağlamamıza olanak tanır.
Ayrıca parametre setlerini işbirlikçilere dağıtmayı veya örneğin bir yayın için destekleyici bilgi olarak sunmayı kolaylaştırır. Bu, çalışmanızı başkaları tarafından daha tekrarlanabilir hale getirir.
Özet¶
İş akışı girdilerini yönetmek için temel yapılandırma seçeneklerinden nasıl yararlanacağınızı biliyorsunuz.
Sırada ne var?¶
İş akışı çıktılarınızın nerede ve nasıl yayınlanacağını nasıl yöneteceğinizi öğrenin.
2. İş akışı çıktılarını yönetin¶
Şimdiye kadar iş akışı düzeyindeki çıktı bildirimleri için tüm yolları sabit kodluyorduk ve birden fazla çıktı eklemeye başladığımızda belirttiğimiz gibi, biraz tekrar söz konusu olabilir.
Bunu daha esnek olacak şekilde yapılandırabileceğiniz birkaç yaygın yola bakalım.
2.1. Çıktı dizinini -output-dir ile özelleştirin¶
'Yayınlanan' çıktılarımızın nasıl organize edildiğini kontrol ederken iki farklı önceliğimiz var:
- Üst düzey çıktı dizini
- Bu dizin içinde dosyaların nasıl organize edildiği
Şimdiye kadar varsayılan üst düzey dizini kullanıyorduk: results.
-output-dir CLI seçeneğini kullanarak bunu özelleştirerek başlayalım.
2.1.1. Pipeline'ı -output-dir ile çalıştırın¶
-output-dir seçeneği (kısaltma: -o) tüm iş akışı çıktıları için varsayılan çıktı dizinini (results/) geçersiz kılar.
Bu, çıktıların yayınlandığı kök yolu kontrol etmenin önerilen yoludur.
Komut çıktısı
Bu, çıktıları results/ yerine custom-outdir-cli/ dizinine yayınlar:
Dizin içeriği
Çıktı bloğundaki path bildirimlerinden hala hello_config alt dizinine sahip olduğumuza dikkat edin.
Bunu temizleyelim.
2.1.2. Çıktı bloğundan sabit kodlanmış yolları kaldırın¶
hello_config/ öneki önceki bölümlerde sabit kodlanmıştı, ancak artık çıktı yollarını esnek bir şekilde yapılandırmayı öğrendiğimize göre, bu sabit kodlamayı kaldırabiliriz.
Alt dizine ihtiyaç duymayan çıktılar için path yönergesini boş bir dizeye ayarlayabilir veya tamamen kaldırabiliriz.
İş akışı dosyasında aşağıdaki kod değişikliklerini yapın:
| hello-config.nf | |
|---|---|
| hello-config.nf | |
|---|---|
Pipeline'ı tekrar çalıştırın:
Artık çıktılar hello_config alt dizini olmadan doğrudan custom-outdir-cli-2/ altında yayınlanıyor:
Dizin içeriği
İpucu
-output-dir seçeneği çıktıların nereye gideceğini kontrol etmek için kullanılırken, çıktı bloğundaki path yönergesi alt dizin yapısını kontrol eder.
2.2. Dinamik çıktı yolları¶
CLI üzerinden çıktı dizinini değiştirmenin yanı sıra, outputDir kullanarak yapılandırma dosyasında özel bir varsayılan değer de ayarlayabiliriz.
Bu, dizin yolunu dinamik olarak ayarlamamıza olanak tanır - sadece statik dizeler kullanmakla kalmaz.
2.2.1. Yapılandırma dosyasında outputDir ayarlayın¶
nextflow.config dosyasına aşağıdaki kodu ekleyin:
Bu, çıktı dizinini custom-outdir-config/ artı batch parametresinin değerini alt dizin olarak ayarlar.
Artık --batch parametresini ayarlayarak çıktı konumunu değiştirebilirsiniz:
Bu, çıktıları custom-outdir-config/my_run/ dizinine yayınlar.
Not
-output-dir CLI seçeneği, outputDir yapılandırma ayarından önceliklidir.
Ayarlanırsa, yapılandırma seçeneği tamamen göz ardı edilecektir.
2.2.2. Batch ve süreç adlarıyla alt dizinler¶
Ayrıca çıktı başına alt dizin çıktı path bildirimlerini dinamik olarak ayarlayabiliriz.
Örneğin, çıktı yolu bildiriminde <process>.name referansı vererek çıktılarımızı sürece göre organize edebiliriz:
| hello-config.nf | |
|---|---|
| hello-config.nf | |
|---|---|
Daha da ileri gidebilir ve daha karmaşık alt dizin yolları oluşturabiliriz.
Yukarıdaki düzenlemede intermediates ile üst düzeydeki son çıktılar arasındaki ayrımı sildik.
Bunu geri koyalım ve ayrıca dosyaları bir params.batch alt dizinine koyalım.
İpucu
params.batch değerini outputDir yapılandırması yerine çıktı bloğu path içine dahil etmek, CLI'da -output-dir ile üzerine yazılmayacağı anlamına gelir.
İlk olarak, outputDir değerinden ${params.batch} değerini kaldırmak için yapılandırma dosyasını güncelleyin (çünkü bunu yol bildirimlerine taşıyoruz):
Ardından, iş akışı dosyasında aşağıdaki değişiklikleri yapın:
| hello-config.nf | |
|---|---|
2.2.3. Pipeline'ı çalıştırın¶
Bunun pratikte nasıl çalıştığını görelim, hem -output-dir (veya kısaca -o) değerini custom-outdir-config-2 olarak hem de batch adını komut satırından rep2 olarak ayarlayalım:
Komut çıktısı
Bu, çıktıları belirtilen temel yol ve batch adı alt dizini ve sürece göre gruplandırılmış sonuçlarla custom-outdir-config-2/rep2/ dizinine yayınlar:
Dizin içeriği
custom-outdir-config-2
└── rep2
├── collectGreetings
│ └── rep2-report.txt
├── cowpy
│ └── cowpy-COLLECTED-rep2-output.txt
└── intermediates
├── collectGreetings
│ └── COLLECTED-rep2-output.txt
├── convertToUpper
│ ├── UPPER-Bonjour-output.txt
│ ├── UPPER-Hello-output.txt
│ └── UPPER-Holà-output.txt
└── sayHello
├── Bonjour-output.txt
├── Hello-output.txt
└── Holà-output.txt
2.3. Yayınlama modunu iş akışı düzeyinde ayarlayın¶
Son olarak, tekrarlayan kod miktarını azaltma ruhuyla, çıktı başına mode bildirimlerini yapılandırmada tek bir satırla değiştirebiliriz.
2.3.1. Yapılandırma dosyasına workflow.output.mode ekleyin¶
nextflow.config dosyasına aşağıdaki kodu ekleyin:
Yapılandırma dosyasında workflow.output.mode ayarlamak, iş akışı dosyasında ayarlananı geçersiz kılmak için yeterlidir, ancak gereksiz kodu yine de kaldıralım.
2.3.2. İş akışı dosyasından çıktı modunu kaldırın¶
İş akışı dosyasında aşağıdaki değişiklikleri yapın:
Bu daha özlü, değil mi?
2.3.3. Pipeline'ı çalıştırın¶
Doğru çalıştığını test edelim:
Komut çıktısı
Bu, çıktıları config-output-mode/ dizinine yayınlar ve hepsi hala sembolik bağlantılar değil, uygun kopyalardır.
Dizin içeriği
config-output-mode
└── batch
├── collectGreetings
│ └── batch-report.txt
├── cowpy
│ └── cowpy-COLLECTED-batch-output.txt
└── intermediates
├── collectGreetings
│ └── COLLECTED-batch-output.txt
├── convertToUpper
│ ├── UPPER-Bonjour-output.txt
│ ├── UPPER-Hello-output.txt
│ └── UPPER-Holà-output.txt
└── sayHello
├── Bonjour-output.txt
├── Hello-output.txt
└── Holà-output.txt
Çıktı başına mod ayarlama yöntemini kullanmak isteyebileceğiniz ana neden, aynı iş akışı içinde karıştırmak ve eşleştirmek istemenizdir, yani bazı çıktıların kopyalanmasını ve bazılarının sembolik bağlantı olmasını sağlamak.
Bu şekilde özelleştirebileceğiniz başka birçok seçenek vardır, ancak umarım bu size seçenek yelpazesi ve tercihlerinize uygun şekilde bunları etkili bir şekilde nasıl kullanacağınız konusunda bir fikir verir.
Özet¶
Çıktılarınızın yayınlandığı dizinlerin adlandırmasını ve yapısını, ayrıca iş akışı çıktı yayınlama modunu nasıl kontrol edeceğinizi biliyorsunuz.
Sırada ne var?¶
İş akışı yapılandırmanızı bilgi işlem ortamınıza nasıl uyarlayacağınızı, yazılım paketleme teknolojisiyle başlayarak öğrenin.
3. Bir yazılım paketleme teknolojisi seçin¶
Şimdiye kadar girdilerin nasıl girdiğini ve girdilerin nereye çıktığını kontrol eden yapılandırma öğelerine bakıyorduk. Şimdi iş akışı yapılandırmanızı bilgi işlem ortamınıza uyarlamaya daha spesifik olarak odaklanma zamanı.
Bu yoldaki ilk adım, her adımda çalıştırılacak yazılım paketlerinin nereden geleceğini belirtmektir. Bunlar yerel bilgi işlem ortamında zaten yüklü mü? Görüntüleri almamız ve bunları bir konteyner sistemi aracılığıyla çalıştırmamız mı gerekiyor? Yoksa Conda paketlerini almamız ve yerel bir Conda ortamı oluşturmamız mı gerekiyor?
Bu eğitim kursunun ilk bölümünde (Bölüm 1-4) iş akışımızda sadece yerel olarak yüklenmiş yazılımı kullandık.
Ardından Bölüm 5'te Docker konteynerlerini ve Docker konteynerlerinin kullanımını etkinleştirmek için kullandığımız nextflow.config dosyasını tanıttık.
Şimdi nextflow.config dosyası aracılığıyla alternatif bir yazılım paketleme seçeneğini nasıl yapılandırabileceğimizi görelim.
3.1. Yapılandırma dosyasında Docker'ı devre dışı bırakın ve Conda'yı etkinleştirin¶
Bir HPC kümesinde çalıştığımızı ve yöneticinin güvenlik nedenleriyle Docker kullanımına izin vermediğini varsayalım. Neyse ki bizim için Nextflow, Singularity (HPC'de daha yaygın olarak kullanılır) dahil olmak üzere birden fazla başka konteyner teknolojisini ve Conda gibi yazılım paket yöneticilerini destekler.
Yapılandırma dosyamızı Docker yerine Conda kullanacak şekilde değiştirebiliriz.
Bunu yapmak için, docker.enabled değerini false olarak değiştirelim ve Conda kullanımını etkinleştiren bir yönerge ekleyelim:
Bu, Nextflow'un Conda paketleri belirtilmiş süreçler için Conda ortamları oluşturmasına ve kullanmasına olanak tanır.
Bu da artık cowpy sürecimize bunlardan birini eklememiz gerektiği anlamına gelir!
3.2. Süreç tanımında bir Conda paketi belirtin¶
cowpy aracını içeren bir Conda paketi için URI'yi zaten aldık: conda-forge::cowpy==1.1.5
Şimdi URI'yi conda yönergesini kullanarak cowpy süreç tanımına ekleyin:
Açık olmak gerekirse, docker yönergesini değiştirmiyoruz, alternatif bir seçenek ekliyoruz.
İpucu
Belirli bir conda paketi için URI'yi almanın birkaç farklı yolu vardır. Bir konteyner oluşturmayı planlamasanız bile kopyalayıp yapıştırabileceğiniz bir URI verecek olan Seqera Containers arama sorgusunu kullanmanızı öneririz.
3.3. Conda kullanabileceğini doğrulamak için iş akışını çalıştırın¶
Hadi deneyelim.
Komut çıktısı
N E X T F L O W ~ version 25.10.2
Launching `hello-config.nf` [friendly_lamport] DSL2 - revision: 024d6361b5
executor > local (8)
[e8/91c116] sayHello (2) [100%] 3 of 3 ✔
[fe/6a70ce] convertToUpper (3) [100%] 3 of 3 ✔
[99/7cc493] collectGreetings [100%] 1 of 1 ✔
[3c/09fb59] cowpy [100%] 1 of 1 ✔
Bu sorunsuz çalışmalı ve custom-outdir-config/conda altında daha önce olduğu gibi aynı çıktıları üretmelidir.
Perde arkasında, Nextflow Conda paketlerini almış ve ortamı oluşturmuştur; bu normalde biraz iş gerektirir; bu yüzden bunların hiçbirini kendimiz yapmak zorunda kalmamamız güzel!
Not
cowpy paketi oldukça küçük olduğu için bu hızlı çalışır, ancak büyük paketlerle çalışıyorsanız, ilk seferinde normalden biraz daha uzun sürebilir ve konsol çıktısının tamamlanmadan önce bir dakika kadar 'takılı' kaldığını görebilirsiniz.
Bu normaldir ve Nextflow'un yeni bir paketi ilk kez kullandığınızda yaptığı ekstra işten kaynaklanır.
Bizim açımızdan, arka planda mekanikler biraz farklı olsa da Docker ile çalıştırmakla tamamen aynı şekilde çalışıyor gibi görünüyor.
Bu, gerekirse Conda ortamlarıyla çalıştırmaya hazır olduğumuz anlamına gelir.
Docker ve Conda'yı karıştırma ve eşleştirme
Bu yönergeler süreç başına atandığından, örneğin kullandığınız bilgi işlem altyapısı her ikisini de destekliyorsa, iş akışınızdaki bazı süreçleri Docker ile ve diğerlerini Conda ile çalıştıracak şekilde yapılandırmak, yani 'karıştırmak ve eşleştirmek' mümkündür. Bu durumda, yapılandırma dosyanızda hem Docker'ı hem de Conda'yı etkinleştirirsiniz. Belirli bir süreç için her ikisi de mevcutsa, Nextflow konteynerlere öncelik verecektir.
Ve daha önce belirtildiği gibi, Nextflow birden fazla başka yazılım paketleme ve konteyner teknolojisini destekler, bu nedenle sadece bu ikisiyle sınırlı değilsiniz.
Özet¶
Her sürecin hangi yazılım paketini kullanması gerektiğini nasıl yapılandıracağınızı ve teknolojiler arasında nasıl geçiş yapacağınızı biliyorsunuz.
Sırada ne var?¶
Nextflow tarafından işi gerçekten yapmak için kullanılan yürütme platformunu nasıl değiştireceğinizi öğrenin.
4. Bir yürütme platformu seçin¶
Şimdiye kadar pipeline'ımızı yerel yürütücü ile çalıştırıyorduk. Bu, her görevi Nextflow'un üzerinde çalıştığı makinede yürütür. Nextflow başladığında, mevcut CPU'lara ve belleğe bakar. Çalıştırılmaya hazır görevlerin kaynakları mevcut kaynakları aşarsa, Nextflow son görevleri, önceki görevlerden biri veya daha fazlası bitene ve gerekli kaynakları serbest bırakana kadar yürütmeden geri tutar.
Yerel yürütücü kullanışlı ve verimlidir, ancak tek bir makineyle sınırlıdır. Çok büyük iş yükleri için, yerel makinenizin bir darboğaz olduğunu keşfedebilirsiniz; ya sahip olduğunuzdan daha fazla kaynak gerektiren tek bir göreviniz olduğu için ya da tek bir makinenin bunları çalıştırmasını beklemenin çok uzun süreceği kadar çok göreviniz olduğu için.
Nextflow, HPC zamanlayıcıları (Slurm, LSF, SGE, PBS, Moab, OAR, Bridge, HTCondor ve diğerleri) ve bulut yürütme arka uçları (AWS Batch, Google Cloud Batch, Azure Batch, Kubernetes ve daha fazlası) dahil olmak üzere birçok farklı yürütücüyü destekler.
4.1. Farklı bir arka ucu hedefleme¶
Yürütücü seçimi, executor adlı bir süreç yönergesi tarafından ayarlanır.
Varsayılan olarak local olarak ayarlanmıştır, bu nedenle aşağıdaki yapılandırma ima edilir:
Yürütücüyü farklı bir arka ucu hedefleyecek şekilde ayarlamak için, kaynak tahsisleri için yukarıda açıklanan benzer sözdizimini kullanarak istediğiniz yürütücüyü belirtirsiniz (tüm seçenekler için yürütücü belgelerine bakın).
Uyarı
Eğitim ortamı bir HPC'ye bağlanacak şekilde kurulmadığı için bunu gerçekten test edemeyiz.
4.2. Yürütme parametreleri için arka uca özgü sözdizimi ile başa çıkma¶
Çoğu yüksek performanslı bilgi işlem platformu, CPU sayısı ve bellek gibi kaynak tahsis isteklerini ve sınırlamalarını ve kullanılacak iş kuyruğunun adını belirtmenize izin verir (ve bazen gerektirir).
Ne yazık ki, bu sistemlerin her biri bir işin nasıl tanımlanması ve ilgili zamanlayıcıya gönderilmesi gerektiğini tanımlamak için farklı teknolojiler, sözdizimi ve yapılandırmalar kullanır.
Örnekler
Örneğin, "my-science-work" kuyruğunda yürütülmek üzere 8 CPU ve 4GB RAM gerektiren aynı işin arka uca bağlı olarak aşağıdaki farklı şekillerde ifade edilmesi gerekir.
#SBATCH -o /path/to/my/task/directory/my-task-1.log
#SBATCH --no-requeue
#SBATCH -c 8
#SBATCH --mem 4096M
#SBATCH -p my-science-work
Neyse ki, Nextflow tüm bunları basitleştirir.
cpus, memory ve queue gibi ilgili özellikleri belirtebilmeniz için standartlaştırılmış bir sözdizimi sağlar (diğer özellikler için süreç yönergelerine bakın) sadece bir kez.
Ardından, çalışma zamanında Nextflow, yürütücü ayarına göre uygun arka uca özgü betikleri oluşturmak için bu ayarları kullanacaktır.
Bu standartlaştırılmış sözdizimini bir sonraki bölümde ele alacağız.
Özet¶
Artık farklı türde bilgi işlem altyapılarını kullanmak için yürütücüyü nasıl değiştireceğinizi biliyorsunuz.
Sırada ne var?¶
Nextflow'da kaynak tahsislerini ve sınırlamalarını nasıl değerlendireceğinizi ve ifade edeceğinizi öğrenin.
5. Bilgi işlem kaynak tahsislerini kontrol edin¶
Çoğu yüksek performanslı bilgi işlem platformu, CPU sayısı ve bellek gibi belirli kaynak tahsis parametrelerini belirtmenize izin verir (ve bazen gerektirir).
Varsayılan olarak, Nextflow her süreç için tek bir CPU ve 2GB bellek kullanacaktır.
Karşılık gelen süreç yönergeleri cpus ve memory olarak adlandırılır, bu nedenle aşağıdaki yapılandırma ima edilir:
Bu değerleri, tüm süreçler için veya belirli adlandırılmış süreçler için, yapılandırma dosyanızda ek süreç yönergeleri kullanarak değiştirebilirsiniz. Nextflow bunları seçilen yürütücü için uygun talimatlara çevirecektir.
Ancak hangi değerleri kullanacağınızı nasıl bilirsiniz?
5.1. Bir kaynak kullanım raporu oluşturmak için iş akışını çalıştırın¶
Süreçlerinizin ne kadar CPU ve belleğe ihtiyaç duyacağını önceden bilmiyorsanız, biraz kaynak profilleme yapabilirsiniz; yani iş akışını bazı varsayılan tahsislerle çalıştırır, her sürecin ne kadar kullandığını kaydeder ve oradan temel tahsisleri nasıl ayarlayacağınızı tahmin edersiniz.
Uygun bir şekilde, Nextflow bunu yapmak için yerleşik araçlar içerir ve talep üzerine sizin için memnuniyetle bir rapor oluşturacaktır.
Bunu yapmak için komut satırınıza -with-report <dosyaadı>.html ekleyin.
Rapor bir html dosyasıdır, indirebilir ve tarayıcınızda açabilirsiniz. Ayrıca soldaki dosya gezgininde sağ tıklayıp eğitim ortamında görüntülemek için Show preview seçeneğine tıklayabilirsiniz.
Raporu incelemek ve kaynakları ayarlamak için bazı fırsatları belirleyip belirleyemeyeceğinizi görmek için birkaç dakikanızı ayırın. Kullanımı tahsis edilenin yüzdesi olarak gösteren sekmelere tıkladığınızdan emin olun.
Mevcut tüm özellikler hakkında belgeler için Raporlar bölümüne bakın.
5.2. Tüm süreçler için kaynak tahsisleri ayarlayın¶
Profilleme, eğitim iş akışımızdaki süreçlerin çok hafif olduğunu gösteriyor, bu yüzden varsayılan bellek tahsisini süreç başına 1GB'a düşürelim.
nextflow.config dosyanıza, pipeline parametreleri bölümünden önce aşağıdakileri ekleyin:
Bu, tükettiğimiz bilgi işlem miktarını azaltmaya yardımcı olacaktır.
5.3. Belirli bir süreç için kaynak tahsisleri ayarlayın¶
Aynı zamanda, cowpy sürecinin diğerlerinden daha fazla kaynak gerektirdiğini varsayacağız, sadece bireysel bir süreç için tahsisleri nasıl ayarlayacağımızı gösterebilmemiz için.
Bu yapılandırmayla, tüm süreçler 1GB bellek ve tek bir CPU (ima edilen varsayılan) talep edecek, cowpy süreci hariç, bu 2GB ve 2 CPU talep edecektir.
İpucu
Az CPU'ya sahip bir makineniz varsa ve süreç başına yüksek bir sayı tahsis ederseniz, süreç çağrılarının birbirinin arkasında sıraya girdiğini görebilirsiniz. Bunun nedeni Nextflow'un mevcut olandan daha fazla CPU talep etmememizi sağlamasıdır.
5.4. Güncellenmiş yapılandırmayla iş akışını çalıştırın¶
Hadi deneyelim, yapılandırma değişikliklerinden önce ve sonra performansı karşılaştırabilmemiz için profilleme raporu için farklı bir dosya adı sağlayalım.
Bu çok küçük bir iş yükü olduğu için muhtemelen gerçek bir fark fark etmeyeceksiniz, ancak bu gerçek dünya iş akışının performansını ve kaynak gereksinimlerini analiz etmek için kullanacağınız yaklaşımdır.
Süreçlerinizin farklı kaynak gereksinimleri olduğunda çok kullanışlıdır. Tahminlere değil, gerçek verilere dayalı olarak her süreç için ayarladığınız kaynak tahsislerini doğru boyutlandırmanızı sağlar.
İpucu
Bu, kaynakların kullanımını optimize etmek için yapabileceklerinizin sadece küçük bir tadımlığıdır. Nextflow'un kendisi, kaynak sınırlamaları nedeniyle başarısız olan işleri yeniden denemek için yerleşik gerçekten düzgün dinamik yeniden deneme mantığına sahiptir. Ek olarak, Seqera Platform, kaynak tahsislerinizi otomatik olarak optimize etmek için yapay zeka destekli araçlar da sunar.
5.5. Kaynak sınırları ekleyin¶
Hangi bilgi işlem yürütücüsünü ve bilgi işlem altyapısını kullandığınıza bağlı olarak, tahsis edebileceğiniz (veya tahsis etmeniz gereken) şeyler üzerinde bazı kısıtlamalar olabilir. Örneğin, kümeniz belirli sınırlar içinde kalmanızı gerektirebilir.
İlgili sınırlamaları ayarlamak için resourceLimits yönergesini kullanabilirsiniz. Sözdizimi, bir süreç bloğunda tek başına olduğunda şöyle görünür:
Nextflow bu değerleri, belirttiğiniz yürütücüye bağlı olarak uygun talimatlara çevirecektir.
Eğitim ortamında ilgili altyapıya erişimimiz olmadığı için bunu çalıştırmayacağız.
Ancak, bu sınırları aşan kaynak tahsisleriyle iş akışını çalıştırmayı denerseniz, ardından .command.run betik dosyasındaki sbatch komutuna bakarsanız, yürütücüye gerçekten gönderilen isteklerin resourceLimits tarafından belirtilen değerlerle sınırlandırıldığını görürsünüz.
Kurumsal referans yapılandırmaları
nf-core projesi, dünya çapındaki çeşitli kurumlar tarafından paylaşılan, çok çeşitli HPC ve bulut yürütücülerini kapsayan bir yapılandırma dosyaları koleksiyonu derlemiştir.
Bu paylaşılan yapılandırmalar hem orada çalışan ve dolayısıyla kurumlarının yapılandırmasını kutudan çıkar çıkmaz kullanabilen insanlar hem de kendi altyapıları için bir yapılandırma geliştirmek isteyen insanlar için bir model olarak değerlidir.
Özet¶
Kaynak kullanımını değerlendirmek için bir profilleme raporu oluşturmayı ve tüm süreçler ve/veya bireysel süreçler için kaynak tahsislerini nasıl değiştireceğinizi, ayrıca HPC'de çalıştırmak için kaynak sınırlamalarını nasıl ayarlayacağınızı biliyorsunuz.
Sırada ne var?¶
Önceden ayarlanmış yapılandırma profillerini nasıl kuracağınızı ve çalışma zamanında bunlar arasında nasıl geçiş yapacağınızı öğrenin.
6. Önceden ayarlanmış yapılandırmalar arasında geçiş yapmak için profilleri kullanın¶
Size, üzerinde çalıştığınız projeye veya kullandığınız bilgi işlem ortamına bağlı olarak pipeline yapılandırmanızı özelleştirebileceğiniz bir dizi yol gösterdik.
Hangi bilgi işlem altyapısını kullandığınıza bağlı olarak alternatif ayarlar arasında geçiş yapmak isteyebilirsiniz. Örneğin, dizüstü bilgisayarınızda yerel olarak küçük ölçekli testler geliştirmek ve çalıştırmak, ardından HPC veya bulutta tam ölçekli iş yüklerini çalıştırmak isteyebilirsiniz.
Nextflow, farklı yapılandırmaları tanımlayan herhangi bir sayıda profil kurmanıza olanak tanır; bunları daha sonra yapılandırma dosyasının kendisini değiştirmek yerine bir komut satırı argümanı kullanarak çalışma zamanında seçebilirsiniz.
6.1. Yerel geliştirme ve HPC'de yürütme arasında geçiş yapmak için profiller oluşturun¶
İki alternatif profil kuralım; biri normal bir bilgisayarda küçük ölçekli yükler çalıştırmak için, burada Docker konteynerlerini kullanacağız, ve biri Slurm zamanlayıcısı olan bir üniversite HPC'sinde çalıştırmak için, burada Conda paketlerini kullanacağız.
6.1.1. Profilleri kurun¶
nextflow.config dosyanıza, pipeline parametreleri bölümünden sonra ancak çıktı ayarlarından önce aşağıdakileri ekleyin:
Üniversite HPC'si için kaynak sınırlamalarını da belirttiğimizi görüyorsunuz.
6.1.2. İş akışını bir profille çalıştırın¶
Nextflow komut satırımızda bir profil belirtmek için -profile argümanını kullanırız.
İş akışını my_laptop yapılandırmasıyla çalıştırmayı deneyelim.
Komut çıktısı
Gördüğünüz gibi, bu çalışma zamanında yapılandırmalar arasında çok rahat bir şekilde geçiş yapmamızı sağlar.
Uyarı
univ_hpc profili, bir Slurm zamanlayıcısına erişimimiz olmadığı için eğitim ortamında düzgün çalışmayacaktır.
Gelecekte bunlarla her zaman birlikte ortaya çıkan başka yapılandırma öğeleri bulursak, bunları basitçe ilgili profil(ler)e ekleyebiliriz. Birlikte gruplandırmak istediğimiz başka yapılandırma öğeleri varsa ek profiller de oluşturabiliriz.
6.2. Test parametrelerinin bir profilini oluşturun¶
Profiller sadece altyapı yapılandırması için değildir. Bunları iş akışı parametreleri için varsayılan değerler ayarlamak için de kullanabiliriz; bu, başkalarının uygun girdi değerlerini kendileri toplamak zorunda kalmadan iş akışını denemelerini kolaylaştırır. Bunu bir parametre dosyası kullanmaya alternatif olarak düşünebilirsiniz.
6.2.1. Profili kurun¶
Bu bağlamda varsayılan değerleri ifade etme sözdizimi şöyle görünür, test olarak adlandırdığımız bir profil için:
İş akışımız için bir test profili eklersek, profiles bloğu şöyle olur:
Teknik yapılandırma profilleri gibi, istediğiniz herhangi bir ad altında parametreleri belirten birden fazla farklı profil kurabilirsiniz.
6.2.2. İş akışını test profiliyle yerel olarak çalıştırın¶
Uygun bir şekilde, profiller birbirini dışlamaz, bu nedenle aşağıdaki sözdizimini kullanarak komut satırımızda birden fazla profil belirtebiliriz -profile <profil1>,<profil2> (herhangi bir sayıda profil için).
Aynı yapılandırma öğeleri için değerler ayarlayan ve aynı yapılandırma dosyasında açıklanan profilleri birleştirirseniz, Nextflow çatışmayı en son okuduğu değeri kullanarak çözecektir (yani dosyada daha sonra gelen her neyse). Çakışan ayarlar farklı yapılandırma kaynaklarında ayarlanmışsa, varsayılan öncelik sırası geçerlidir.
Önceki komutumuza test profilini eklemeyi deneyelim:
Komut çıktısı
Bu, mümkün olduğunda Docker kullanacak ve çıktıları custom-outdir-config/test altında üretecek ve bu sefer karakter komedi ikilisi dragonandcow.
Dosya içeriği
_________
/ HOLà \
| HELLO |
\ BONJOUR /
---------
\ ^ /^
\ / \ // \
\ |\___/| / \// .\
\ /O O \__ / // | \ \ *----*
/ / \/_/ // | \ \ \ |
\@___\@` \/_ // | \ \ \/\ \
0/0/| \/_ // | \ \ \ \
0/0/0/0/| \/// | \ \ | |
0/0/0/0/0/_|_ / ( // | \ _\ | /
0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
,-} _ *-.|.-~-. .~ ~
\ \__/ `/\ / ~-. _ .-~ /
\____(oo) *. } { /
( (--) .----~-.\ \-` .~
//__\\ \__ Ack! ///.----..< \ _ -~
// \\ ///-._ _ _ _ _ _ _{^ - - - - ~
Bu, iş akışı koduyla herhangi bir test veri dosyası dağıttığımız sürece, herkesin komut satırı veya bir parametre dosyası aracılığıyla kendi girdilerini sağlamak zorunda kalmadan iş akışını hızlı bir şekilde deneyebileceği anlamına gelir.
İpucu
Harici olarak depolanan daha büyük dosyalar için URL'lere işaret edebiliriz. Açık bir bağlantı olduğu sürece Nextflow bunları otomatik olarak indirecektir.
Daha fazla ayrıntı için, Yan Görev Dosyalarla Çalışma bölümüne bakın
6.3. Çözümlenmiş yapılandırmayı görmek için nextflow config kullanın¶
Yukarıda belirtildiği gibi, bazen aynı parametre birleştirmek istediğiniz profillerde farklı değerlere ayarlanabilir. Ve daha genel olarak, yapılandırma öğelerinin depolanabileceği çok sayıda yer vardır ve bazen aynı özellikler farklı yerlerde farklı değerlere ayarlanabilir.
Nextflow, herhangi bir çatışmayı çözmek için bir set öncelik sırası uygular, ancak bunu kendiniz belirlemek zor olabilir. Ve hiçbir şey çakışmasa bile, şeylerin yapılandırılabileceği tüm olası yerlere bakmak sıkıcı olabilir.
Neyse ki, Nextflow, tüm bu süreci sizin için otomatikleştirebilecek config adlı kullanışlı bir yardımcı program aracı içerir.
config aracı, mevcut çalışma dizininizdeki tüm içerikleri keşfedecek, herhangi bir yapılandırma dosyasını toplayacak ve Nextflow'un iş akışını çalıştırmak için kullanacağı tamamen çözümlenmiş yapılandırmayı üretecektir.
Bu, herhangi bir şey başlatmak zorunda kalmadan hangi ayarların kullanılacağını öğrenmenizi sağlar.
6.3.1. Varsayılan yapılandırmayı çözümleyin¶
Varsayılan olarak uygulanacak yapılandırmayı çözümlemek için bu komutu çalıştırın.
Komut çıktısı
Bu, komut satırında ekstra bir şey belirtmezseniz aldığınız temel yapılandırmayı gösterir.
6.3.2. Belirli ayarlar etkinleştirilmiş yapılandırmayı çözümleyin¶
Komut satırı parametreleri sağlarsanız, örneğin bir veya daha fazla profili etkinleştirerek veya bir parametre dosyası yükleyerek, komut bunları da ek olarak dikkate alacaktır.
Komut çıktısı
Bu, birden fazla yapılandırma katmanı içeren karmaşık projeler için özellikle kullanışlı hale gelir.
Özet¶
Minimum güçlükle çalışma zamanında önceden ayarlanmış bir yapılandırmayı seçmek için profilleri nasıl kullanacağınızı biliyorsunuz. Daha genel olarak, iş akışı yürütmelerinizi farklı bilgi işlem platformlarına uyacak şekilde nasıl yapılandıracağınızı ve analizlerinizin tekrarlanabilirliğini nasıl artıracağınızı biliyorsunuz.
Sırada ne var?¶
Kutlayın ve kendinize büyük bir alkış verin! İlk Nextflow geliştirici kursunuzu tamamladınız.
Ne öğrendiğinizi gözden geçirmek ve sırada ne olduğunu öğrenmek için son kurs özetine gidin.
Quiz¶
Nextflow'un otomatik olarak yüklediği yapılandırma dosyasının adı nedir?
Aynı parametre hem yapılandırma dosyasında hem de komut satırında ayarlandığında hangisi önceliklidir?
Aynı yapılandırmada hem Docker hem de Conda etkinleştirilebilir mi?
Hem Docker hem de Conda etkinleştirilmişse ve bir sürecin her iki yönergesi de varsa, hangisine öncelik verilir?
Nextflow süreçleri için varsayılan bellek tahsisi nedir?
Yapılandırma dosyasında belirli bir süreç için kaynak gereksinimlerini nasıl ayarlarsınız?
Bir kaynak kullanım raporu oluşturan komut satırı seçeneği nedir?
resourceLimits yönergesi ne yapar?
Nextflow'da varsayılan yürütücü nedir?
Nextflow çalıştırırken bir parametre dosyasını nasıl belirtirsiniz?
Profiller ne için kullanılabilir? (Tümünü seçin)
Tek bir komutta birden fazla profili nasıl belirtirsiniz?