View a markdown version of this page

容器映像的最佳實務 - AWS HealthOmics

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

容器映像的最佳實務

當您為 HealthOmics 工作流程建置容器映像時,請遵循這些最佳實務。

在 Amazon ECR 容器映像中使用 Java

如果工作流程任務使用 Java 應用程式,例如 GATK,請考慮容器的下列記憶體需求:

  • Java 應用程式使用堆疊記憶體和堆積記憶體。根據預設,堆積記憶體上限是容器中可用記憶體總數的百分比。此預設值取決於特定的 JVM 分佈和 JVM 版本,因此請參閱 JVM 的相關文件,或使用 Java 命令列選項 (例如 ) 明確設定堆積記憶體上限-Xmx。

  • 請勿將堆積記憶體上限設定為容器記憶體配置的 100%,因為 JVM 堆疊也需要記憶體。JVM 垃圾收集器和在容器中執行的任何其他作業系統程序也需要記憶體。

  • 有些 Java 應用程式,例如 GATK,可以使用原生方法叫用或其他最佳化,例如記憶體映射檔案。這些技術需要「非堆積」執行的記憶體配置,JVM 堆積上限參數無法控制。

    如果您知道 (或懷疑) Java 應用程式配置堆積外記憶體,請確定任務記憶體配置包含堆積外記憶體需求。

    如果這些堆積外配置導致容器耗盡記憶體,您通常不會看到 Java OutOfMemory錯誤,因為 JVM 無法控制此記憶體。

將任務輸入新增至 Amazon ECR 容器映像

將執行工作流程任務所需的所有可執行檔、程式庫和指令碼新增至用於執行任務的 Amazon ECR 映像。

最佳實務是避免使用任務容器映像外部的指令碼、二進位檔和程式庫。這在使用將bin目錄做為nf-core工作流程套件一部分的工作流程時特別重要。雖然此目錄可供工作流程任務使用,但它會掛載為唯讀目錄。此目錄中的必要資源應複製到任務映像,並在執行時間或建置用於任務的容器映像時提供。

HealthOmics 工作流程固定大小配額 如需 HealthOmics 支援的容器映像大小上限,請參閱 。

使用摘要或版本而非非 PTC 影像的標籤

對於來自提取快取之登錄檔的容器映像不支援,例如 Seqera、NVIDIANGC 和 Google Artifact Registry,請參考摘要或版本,而非標籤,例如 latest。HealthOmics 會在任務第一次需要時複製映像,而不會重新整理複本,因此上游變更的標籤會繼續解析為較早的複本。如需詳細資訊,請參閱使用提取快取不支援的第三方登錄檔。

下列範例依版本和摘要參考 Seqera Containers 映像:

community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd@sha256:a55ddea590e567a91df592300a960aa534cfc1bd16e7623e3938ec21f4f3df15