Các sáng kiến hệ gen quốc gia gần đây cho thấy nhu cầu ngày càng lớn về nguồn tài nguyên hệ gen đặc thù cho từng quần thể. Sau khi đọc VN1K: a genome graph-based and function-driven multi-omics and phenomics resource for the Vietnamese population và EGP1K: Whole-Genome Sequencing of 1,024 Egyptians Characterizes Population Structure and Genetic Diversity, có thể thấy rõ việc xây dựng một dự án 1000 hệ gen quy mô quốc gia ngày càng quan trọng để hiểu về đa dạng di truyền, cải thiện nghiên cứu bệnh học và thúc đẩy y học chính xác.
Xin dành sự ghi nhận đặc biệt cho nhóm VN1K tại Viện Dữ liệu lớn Vingroup và các cộng sự. Việc xây dựng nguồn tài nguyên toàn diện đầu tiên cho quần thể người Việt — 1.011 cá nhân, gần 40 triệu biến thể với 8,5 triệu biến thể mới, cùng các lớp đa omics bao gồm methyl hóa từ dữ liệu đọc dài — đi kèm vô vàn thách thức, từ thu thập mẫu, giải trình tự độ sâu cao ở quy mô lớn đến tích hợp đa omics và khả năng truy cập dữ liệu. Công trình của họ đã mở đường cho những gì chuỗi bài này trình bày.
Trong chuỗi bài này, tôi phác thảo cách một quốc gia có thể thiết kế và triển khai một dự án ở quy mô tương tự — từ thu thập mẫu đến phân tích hệ gen cấp cohort. Nội dung tập trung vào khía cạnh kỹ thuật và kiến trúc để xây dựng nguồn tài nguyên 1000 hệ gen. Chuỗi bài không đề cập đến nền tảng dữ liệu hay cổng người dùng để truy cập dữ liệu đã xử lý; chủ đề đó sẽ được trình bày trong một bài riêng.
Mục tiêu là cung cấp một lộ trình thực tế, có khả năng mở rộng để các quốc gia — đặc biệt là những nước có hạ tầng genomics đang phát triển — có thể điều chỉnh cho sáng kiến hệ gen quốc gia của mình.
Giang Nguyen — Founder @ Vieomics. Trong thời gian làm việc tại DNAnexus, tôi đã tham gia xây dựng hạ tầng bioinformatics và phân tích dữ liệu hệ gen quy mô lớn, bao gồm các khối lượng công việc với hàng trăm nghìn mẫu. Trong chuỗi bài này, tôi sẽ trình bày cách làm điều đó chỉ với công cụ mã nguồn mở — được kiểm chứng trên các mẫu thực tế, với những bộ dữ liệu nhỏ dùng cho proof of concept.
Dự án 1000 Genomes gốc (2008-2015) là một dấu mốc quan trọng của ngành hệ gen người — dự án đã tạo ra danh mục toàn diện đầu tiên về biến thể di truyền toàn cầu, cung cấp bản đồ tham chiếu giúp việc gọi biến thể và di truyền học quần thể trở nên phổ biến. Nhưng vấn đề nằm ở đây: dù vô cùng giá trị trên phạm vi toàn cầu, dữ liệu đó không đại diện đầy đủ cho quần thể, thách thức y tế hay bối cảnh di truyền của từng quốc gia.
Phân tích hệ gen hiện đại phụ thuộc rất nhiều vào tần số biến thể đặc thù của từng quần thể. Khi thực hiện giải nghĩa biến thể, chẩn đoán bệnh hiếm hay dược di truyền học, bạn cần biết: Biến thể này phổ biến đến mức nào trong quần thể mà tôi đang điều trị? Dự án 1000 Genomes khảo sát khoảng 2.500 cá nhân thuộc nhiều quần thể khác nhau, nhưng biến thể di truyền trong quần thể địa phương của bạn — được định hình bởi lịch sử di cư, hiệu ứng sáng lập (founder effect) và áp lực tiến hóa riêng — có thể khác biệt đáng kể.
Ý nghĩa lâm sàng là có thật:
Các dự án hệ gen quy mô lớn không chỉ tạo ra dữ liệu — chúng tạo ra hạ tầng, chuyên môn và giá trị kinh tế. Những quốc gia tự xây dựng dự án của mình sẽ có được:
Tin tốt là: nhiều quốc gia đã và đang xây dựng các dự án hệ gen quy mô lớn. Dưới đây là những bài học từ họ:
Các chương trình này có những điểm chung: đều chuẩn hóa gọi biến thể, triển khai chiến lược joint genotyping, xây dựng tầng phân tích toàn cohort và đầu tư mạnh vào quản trị dữ liệu. Bản thiết kế kỹ thuật đã được chứng minh — giờ là lúc điều chỉnh nó cho nguồn lực, quần thể và ưu tiên y tế của từng quốc gia.
Hình 1: Tổng quan các nguồn tài nguyên hệ gen trong những ngân hàng sinh học quốc gia. a Phân bố địa lý của các ngân hàng sinh học, với số mẫu thể hiện tổng quy mô cohort mà mỗi ngân hàng hướng tới hoặc đã đạt được. Các ngân hàng sinh học lớn sở hữu bộ dữ liệu WGS quy mô trên 10.000 cá nhân được làm nổi bật. Dấu hoa thị (“*”) biểu thị quy mô cohort mục tiêu. b Thông tin chi tiết về kích thước mẫu WGS, thành phần tổ tiên và tình trạng sức khỏe của các bộ dữ liệu ngân hàng sinh học tương ứng đã được công bố gần đây
Tham khảo: https://link.springer.com/article/10.1186/s44342-025-00040-9
Trong khi các chương trình quốc gia và nhà nước chiếm ưu thế, các công ty và tổ chức tư nhân cũng đã xây dựng những sáng kiến hệ gen quy mô lớn đáng chú ý. Hiểu cách họ làm mang lại bài học giá trị về hạ tầng, khả năng mở rộng và quản trị dữ liệu.
Công ty cung cấp dịch vụ trực tiếp cho người tiêu dùng (DTC)
Dược phẩm & phát triển thuốc
Công ty genomics lâm sàng & chẩn đoán
Hạ tầng toàn cầu & giải trình tự
Bài học chính từ các chương trình tư nhân:
Các tổ chức tư nhân thành công vì họ:
Với các chương trình quốc gia, mô hình khu vực tư nhân dạy chúng ta rằng tính hữu dụng của dữ liệu thúc đẩy sự tham gia. Mọi người đóng góp mẫu khi thấy lợi ích lâm sàng trực tiếp (chẩn đoán, thông tin sức khỏe) hoặc khi việc tham gia phù hợp với động lực cá nhân (nguồn gốc tổ tiên, y học chính xác).
Xây dựng một dự án quy mô 1000 Genomes đòi hỏi:
Nhưng đây là điểm mấu chốt từ các chương trình hiện có: phần mềm, pipeline và hạ tầng đã đủ trưởng thành để điều này trở nên khả thi với bất kỳ chương trình quốc gia nào có đủ nguồn lực.
Chuỗi bài này dẫn bạn đi qua kiến trúc, các quyết định thiết kế và chiến lược triển khai để xây dựng một dự án hệ gen quốc gia — từ gọi biến thể đến phân tích cohort.
Về bản chất, một dự án hệ gen quốc gia là một pipeline biến đổi dữ liệu: reads giải trình tự thô → biến thể chuẩn hóa → kiểu gen toàn cohort → dữ liệu sẵn sàng cho nghiên cứu. Kiến trúc phải xử lý quy mô khổng lồ, đảm bảo tính nhất quán trên hàng nghìn mẫu và đáp ứng các yêu cầu nghiêm ngặt về quản trị dữ liệu.
Dưới đây là kiến trúc chúng ta sẽ xây dựng, dựa trên những thành phần thực tế, đã được chứng minh:
Hình 2: Kiến trúc đầu-cuối thể hiện dòng dữ liệu từ giải trình tự thô đến phân tích quần thể, với các công cụ và tầng lưu trữ cụ thể ở từng bước.
Vì sao chọn SLURM?
Nền tảng là một cụm tính toán hiệu năng cao được quản lý bởi SLURM.
Hình 3: Kiến trúc cụm HPC SLURM và lưu trữ đối tượng đơn giản S3
Thiết lập chính:
Mỗi hệ gen phải trải qua cùng một logic gọi biến thể. Đây là điều không thể thương lượng đối với phân tích cohort.
Pipeline: nf-germline-short-read-variant-calling
Vì sao dùng gVCF? Định dạng này không chỉ chứa các biến thể được gọi mà còn cả "no-call đáng tin cậy" tại từng vị trí hệ gen. Điều này rất quan trọng cho joint genotyping về sau — nếu thiếu, bạn sẽ mất thông tin về độ sâu bao phủ và chất lượng kiểu gen.
Quy mô: xử lý 100 mẫu/tháng ở độ phủ 30x:
Hình 4: Pipeline Nextflow gọi biến thể từ dữ liệu đọc ngắn trên nền tảng Illumina, tối ưu cho WGS 30X. Pipeline tích hợp với nf-modules để chuẩn hóa và chia sẻ các thành phần chung giữa các pipeline
Sau khi gọi biến thể, bạn có hàng nghìn tệp gVCF riêng lẻ, mỗi mẫu được gọi độc lập. Nhưng gọi độc lập chưa đủ cho genomics quy mô quần thể. Bạn phải kết hợp chúng thành một VCF cohort bằng joint variant calling.
Hình 5: Joint genotyping dung hợp các lời gọi riêng lẻ. Tại chr1, gVCF của mẫu A ghi nhận biến thể A>G trong khi mẫu B không ghi nhận biến thể — có thể do độ phủ thấp hoặc tín hiệu dưới ngưỡng gọi biến thể, chứ không có nghĩa là đồng hợp tử reference. Joint calling gọi lại kiểu gen tại mọi vị trí trên từng mẫu dựa trên bằng chứng độ sâu và chất lượng mà mỗi gVCF lưu giữ, tạo ra một VCF cohort với kiểu gen có thể so sánh trên toàn bộ cohort.
Bốn phương án trong một bảng
Cả bốn công cụ đều nhận gVCF theo từng mẫu và tạo ra call set cohort, nhưng khác nhau về phương pháp, giấy phép và — quan trọng nhất — điều gì xảy ra khi có mẫu mới:
| Công cụ | Phương pháp | Thêm mẫu mới | Quy mô |
|---|---|---|---|
| GLnexus (Apache-2.0) | Joint genotyping | ❌ Chạy lại toàn bộ | ~100k mẫu |
| DPGT (GPL-3.0) | Joint genotyping (Spark) | ❌ Chạy lại toàn bộ (tiếp tục được sau gián đoạn) | Hàng triệu mẫu |
| DRAGEN iGG — Illumina (độc quyền) | Joint genotyping | ✅ Tổng hợp tăng dần theo lô | Cohort quy mô quần thể |
| Hail VDS combiner (MIT) | Chỉ kết hợp (không gọi lại kiểu gen) | ✅ Tăng dần, khởi động lại được | Hơn 150k hệ gen (gnomAD) |
Chỉ ba công cụ đầu gọi lại kiểu gen từ bằng chứng gVCF. Hail VDS combiner dung hợp các call set mà không xem lại kiểu gen từng mẫu, nên không thể cải thiện chất lượng biến thể như joint genotyping.
Phương án A: GLnexus (hiệu quả, khuyến nghị cho dưới 100k mẫu)
# GLnexus merges gVCFs into a cohort VCFglnexus_cli --config DeepVariant_h37 --bed <bed file> *.gvcf.gz > cohort.bcfbcftools view cohort.bcf -O z > cohort.vcf.gzPhương án B: DPGT với Spark (mã nguồn mở, dựng cho quy mô lớn)
#!/bin/bash# DPGT runner for joint genotyping cohort VCF
set -euo pipefail
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"BUILD_LIB_PATH="${PROJECT_ROOT}/build/lib"DPGT_JAR="${PROJECT_ROOT}/DPGT/target/dpgt-1.3.2.0.jar"
# Defaults (override with env vars if needed)INPUT_LIST="${INPUT_LIST:-${PROJECT_ROOT}/cohort_vcf/1KGP/gvcf_input.list}"REFERENCE_FASTA="${REFERENCE_FASTA:-${PROJECT_ROOT}/reference/Homo_sapiens_assembly38.fasta}"OUTPUT_DIR="${OUTPUT_DIR:-${PROJECT_ROOT}/cohort_vcf/1KGP/results}"TARGET_REGION="${TARGET_REGION:-chr12:111760000-111763759}"JOBS="${JOBS:-4}"ALLOW_OVERWRITE="${ALLOW_OVERWRITE:-0}"
echo "================================"echo "DPGT Cohort VCF Runner"echo "================================"echo ""
# Check prerequisitesecho "Checking prerequisites..."if [ -z "$DPGT_JAR" ] || [ ! -f "$DPGT_JAR" ]; then echo "ERROR: DPGT JAR not found at $DPGT_JAR" echo "Run 'make build' to compile DPGT first" exit 1fi
if [ ! -f "$BUILD_LIB_PATH/libcdpgt.so" ]; then echo "ERROR: libcdpgt.so not found at $BUILD_LIB_PATH" echo "Run 'make build-cpp' to compile C++ libraries" exit 1fi
if [ ! -f "$INPUT_LIST" ]; then echo "ERROR: input list not found: $INPUT_LIST" echo "Create it with one gVCF path per line (3-sample trio supported)." echo "Example existing list: ${PROJECT_ROOT}/gvcf_input.list" exit 1fi
if [ ! -f "$REFERENCE_FASTA" ]; then echo "ERROR: reference fasta not found: $REFERENCE_FASTA" exit 1fi
if [ -d "$OUTPUT_DIR" ] && [ "$(ls -A "$OUTPUT_DIR" 2>/dev/null || true)" != "" ]; then if [ "$ALLOW_OVERWRITE" = "1" ]; then echo "Output exists. Removing: $OUTPUT_DIR" rm -rf "$OUTPUT_DIR" else echo "ERROR: output directory exists and is not empty: $OUTPUT_DIR" echo "Set ALLOW_OVERWRITE=1 or choose another OUTPUT_DIR" exit 1 fifi
echo "DPGT JAR: $DPGT_JAR"echo "C++ Library: $BUILD_LIB_PATH/libcdpgt.so"echo "Input List: $INPUT_LIST"echo "Reference: $REFERENCE_FASTA"echo "Output Dir: $OUTPUT_DIR"echo "Region: $TARGET_REGION"echo ""echo "Note: default region is a small smoke-test interval."echo ""
# Runtime environmentexport LD_LIBRARY_PATH="$BUILD_LIB_PATH:${LD_LIBRARY_PATH:-}"
echo "Running DPGT joint genotyping..."echo ""
# Some environments need explicit local filesystem implementations for Spark/Hadoopjava \ -Dspark.hadoop.fs.file.impl=org.apache.hadoop.fs.LocalFileSystem \ -Dspark.hadoop.fs.AbstractFileSystem.file.impl=org.apache.hadoop.fs.local.LocalFs \ -cp "$DPGT_JAR" \ org.bgi.flexlab.dpgt.jointcalling.JointCallingSpark \ -i "$INPUT_LIST" \ -r "$REFERENCE_FASTA" \ -o "$OUTPUT_DIR" \ -j "$JOBS" \ -l "$TARGET_REGION" \ --local
echo ""echo "Run complete."echo "Output files in: $OUTPUT_DIR"find "$OUTPUT_DIR" -maxdepth 1 -type f -name "result*.vcf.gz" -print || truePhương án C: Illumina DRAGEN Iterative gVCF Genotyper (độc quyền)
DRAGEN iterative gVCF Genotyper (iGG) của Illumina giải quyết trực tiếp vấn đề chạy lại: công cụ tổng hợp gVCF theo từng lô, nên khi thêm mẫu mới chỉ cần chạy lô mới qua bước đầu tiên rồi tổng hợp lại census của cohort — không phải làm lại toàn bộ từ đầu. Đánh đổi: đây là tính năng có phí, mã nguồn đóng, tính theo gigabase dữ liệu đầu vào, và gVCF đầu vào phải đến từ hệ sinh thái DRAGEN.
Phương án D: Hail VDS Combiner (chỉ kết hợp)
Nếu bạn chỉ cần kết hợp các call set — không cần gọi lại kiểu gen — VariantDatasetCombiner của Hail là lựa chọn mã nguồn mở: có thể khởi động lại, chịu lỗi và kết hợp tăng dần gVCF với các VDS hiện có (150.000 hệ gen của gnomAD được xây theo cách này). Hạn chế: công cụ kết hợp dữ liệu và giữ nguyên lời gọi hiện có của từng mẫu — không chạy bước gọi lại kiểu gen chung, nên không cải thiện chất lượng biến thể như GLnexus, DPGT hay iGG.
Đầu ra: một tệp cohort.vcf.gz duy nhất chứa tất cả mẫu và tất cả biến thể. Với dự án khoảng 1000 mẫu, tệp có thể lên tới 200–500 GB (tùy thuộc vào mức đa dạng của biến thể và mẫu)
VCF cohort thô chưa sẵn sàng cho phân tích. Nó cần được QC và chuyển đổi sang các định dạng hiệu quả. Việc QC cần được điều chỉnh theo chất lượng của dữ liệu đầu vào
Dùng MatrixTable của Hail:
# Load cohort VCF into Hailmt = hl.import_vcf('cohort.vcf.gz')
# Sample-level QCmt = mt.filter_cols(hl.agg.count_where(mt.GT.is_non_ref()) > 100)
# Variant-level QCmt = mt.filter_rows(hl.agg.count_where(mt.GT.is_non_ref()) > 0)
# Export to multiple formats for different toolsmt.export('cohort.plink') # PLINK format for association studiesmt.export_bgen('cohort.bgen') # BGEN format (more efficient)mt.write('cohort.vds') # Hail VDS (best for Hail)Các định dạng xuất cho từng mục đích sử dụng:
Lọc QC loại bỏ:
Chiến lược chủ quyền dữ liệu: thay vì tự xây dựng hạ tầng lưu trữ tại chỗ, hãy hợp tác với một nhà cung cấp S3 trong nước (cloud hoặc do nhà nước hậu thuẫn) để lưu trú dữ liệu dài hạn. Cách này giữ dữ liệu trong nước mà không cần đầu tư vốn lớn vào phần cứng lưu trữ.
Ngày nay, dữ liệu nên được truy cập qua nền tảng dữ liệu, nơi người dùng cần:
Kiến trúc:
Kiến trúc hệ thống gồm:
Vì sao chọn mô hình hợp tác này?
Giá trị dài hạn: sau khi dự án 1k mẫu hoàn thành, hạ tầng S3 này vẫn sẵn sàng cho các mở rộng trong tương lai (lưu trữ đa omics, dữ liệu cohort bệnh học, lưu trữ dài hạn)
Ở Phần 2, chúng ta đi vào các nguyên tắc thiết kế — chuẩn hóa, song song hóa theo vùng, phân tầng lưu trữ và quản trị liên kết — cùng lộ trình triển khai 5 giai đoạn.
Đây là Phần 1 của chuỗi bài về xây dựng dự án 1000 hệ gen quốc gia. Tiếp tục đến Phần 2 để tìm hiểu các nguyên tắc thiết kế và lộ trình triển khai.
