MỤC LỤC BÀI VIẾT
Phân tích hiệu quả và tái lập trong Tin sinh
Thế kỷ XXI chứng kiến một cuộc cách mạng trong nghiên cứu sinh học, lâm sàng và dược lý nhờ vào sự phát triển vượt bậc của các công nghệ giải trình tự thông lượng cao (high-throughput technologies). Các công nghệ này tạo ra lượng dữ liệu khổng lồ về genomes, transcriptomes, proteomes, interactomes,… Phân tích và tích hợp lượng dữ liệu “Big Data” này đòi hỏi sức mạnh tính toán vượt xa khả năng của một máy tính thông thường. Do đó, các nhà nghiên cứu phải đối mặt với thách thức làm thế nào để mở rộng quy mô phân tích một cách hiệu quả dựa vào các cụm máy tính hiệu năng cao (HPC) hoặc nền tảng đám mây (cloud platforms). Đồng thời, họ cần đảm bảo rằng các phân tích này có thể chạy một cách tái lập, đặc biệt quan trọng trong môi trường lâm sàng, nơi kết quả cần được tạo ra nhanh chóng trong vòng vài giờ.
Thách thức của phân tích Tin sinh quy mô lớn
Việc xử lý dữ liệu Tin sinh không chỉ đòi hỏi nhiều tài nguyên tính toán do khối lượng dữ liệu lớn mà còn do bản chất phức tạp của các thuật toán phân tích. Các tính toán tốn kém điển hình như: Bayes analysis, hidden Markov models và maximum likelihood analysis được thực hiện bởi các phần mềm như MrBayes, HMMER và PAML. Kích thước dữ liệu ngang ngửa một bộ genome, như dữ liệu từ các dự án giải trình tự quy mô lớn, làm tăng thêm sự trầm trọng cho những thách thức tính toán này.
Một vấn đề khác là nhiều phần mềm tin sinh học (bioinformatics) hiện tại, đặc biệt là các phần mềm cũ (legacy software), không có khả năng mở rộng tốt. Ví dụ, CodeML trong bộ PAML được thiết kế như một quy trình đơn luồng (single-threaded), chỉ sử dụng một CPU duy nhất. Để phân tích hàng trăm bộ dữ liệu (ví dụ: các họ gen khác nhau), PAML phải được chạy lặp đi lặp lại một cách tuần tự, có thể mất hàng ngày trên một máy tính. Vấn đề này không chỉ riêng PAML mà đúng với bất kỳ chương trình nào bị giới hạn bởi CPU (CPU bound) và không tự động mở rộng quy mô. Lý do chính khiến hầu hết các chương trình tin sinh học hiện nay không tận dụng hiệu quả các máy tính đa nhân (multi-core) hoặc GPU là vì việc viết phần mềm hỗ trợ đa luồng (multithreaded) hoặc song song hóa (parallelization) là vô cùng khó khăn. Nó đòi hỏi xử lý luồng dữ liệu và điều khiển bổ sung, tránh các tình trạng bế tắc (deadlocks) hoặc điều kiện tranh chấp (race conditions).
Song song hóa: Chiến lược phổ biến trong Tin sinh học
Chiến lược song song hóa phổ biến trong tin sinh học là tận dụng các ứng dụng không song song sẵn có và chạy chúng bằng cách chia dữ liệu thành các đơn vị công việc độc lập, chạy song song và không cần giao tiếp với nhau. Với ví dụ PAML, mỗi đơn vị có thể dựa trên một bộ dữ liệu căn chỉnh (alignment) duy nhất, có khả năng mang lại cải thiện tốc độ tuyến tính bằng cách phân phối các đơn vị này trên nhiều CPU và máy tính. Mặc dù phần mềm PAML tự nó không chạy song song, nhưng việc chạy nhiều phiên bản PAML trên các tập dữ liệu khác nhau có thể được song song hóa. Ngay cả với các ứng dụng đa luồng như BLAST và MrBayes, việc phân phối các lần chạy độc lập trên nhiều máy vẫn có thể mở rộng quy mô tính toán.
Cơ sở hạ tầng cho phân tích mở rộng quy mô
Để mở rộng quy mô tính toán, các nhà nghiên cứu sử dụng nhiều loại cơ sở hạ tầng khác nhau.
- Cụm máy tính hiệu năng cao (HPC) và Điện toán đám mây (Cloud Computing): Trước đây, các nhà tin sinh học và quản trị hệ thống phải tự cài đặt và duy trì các cụm máy tính lớn. Ngày nay, điện toán đám mây cho phép thuê và truy cập CPU, GPU và lưu trữ theo yêu cầu (on-demand), mang lại sự linh hoạt cao hơn. Các nhà cung cấp đám mây lớn như Google, Microsoft, Amazon (AWS) đều hỗ trợ container. Ngoài ra còn có các hệ thống xử lý phân tán cấp cao hơn như MapReduce (được triển khai trong Apache Hadoop và Apache Spark) rất phù hợp cho việc xử lý các tập dữ liệu khổng lồ trên số lượng máy tính lớn. Những hệ thống này không chỉ phần cứng mà còn cả hệ điều hành, thiết lập thời gian chạy cho các đơn vị công việc, điều phối tài nguyên, đơn giản hóa việc xử lý và triển khai máy ảo/container.
- Điện toán Bùng nổ (Burst Computing): Một cách tiếp cận là kết hợp hạ tầng đám mây với thiết lập cục bộ. Máy ảo hoặc container có thể được chuẩn bị cục bộ và sau đó được sử dụng trên đám mây khi phân tích mất quá nhiều thời gian hoặc khi cần xử lý tải lượng dữ liệu lớn.
- GPU Computing: Một phát triển gần đây là sử dụng GPU, thường đa nhân có thể thực hiện các lệnh tương tự cùng lúc, giúp tăng tốc đáng kể một số loại tính toán. Lập trình GPU ngày càng phổ biến trên các cụm HPC và trên đám mây.
Bài toán tái lập và chia sẻ
Thách thức không chỉ nằm ở việc chạy tính toán trên nhiều máy, mà còn ở việc quản lý các quy trình phức tạp này và đảm bảo chúng có thể được lặp lại. Các quy trình tính toán thường bao gồm nhiều công cụ phần mềm nối tiếp nhau, kết hợp với việc phân tán công việc và thu thập kết quả. Nhiều quy trình trong tin sinh học hiện nay được tạo bằng Bash, Perl hoặc Python và gửi tới các công cụ quản lý công việc (schedulers) như Slurm. Ưu điểm của các script này là dễ viết và điều chỉnh, nhưng nhược điểm là khó bảo trì và không linh hoạt, vì mô tả môi trường và các gói phần mềm không phải là một phần của script. Điều này làm giảm hoặc loại bỏ hoàn toàn khả năng tái lập một phân tích trong môi trường khác. Kết quả là việc chia sẻ quy trình trở nên khó khăn và tốn nhiều công sức.
Hệ thống Quản lý quy trình
Các phương pháp giải quyết vấn đề chia sẻ và tái lập quy trình đã được bắt đầu trong những năm gần đây. Hệ thống quản lý quy trình cung cấp một cách tiếp cận có cấu trúc hơn để mô tả và thực thi các quy trình phân tích:
- Common Workflow Language (CWL): CWL dùng cho việc mô tả các quy trình và công cụ một cách linh hoạt trên nhiều nền tảng tính toán khác nhau, từ máy trạm đến cụm máy tính, đám mây và môi trường HPC. CWL là một nỗ lực cộng đồng lớn trong tin sinh học và được hỗ trợ bởi nhiều nền tảng khác nhau như Arvados, Galaxy và Seven Bridges. CWL được viết bằng định dạng JSON hoặc YAML, mô tả các bước và mối quan hệ phụ thuộc giữa các bước đó. Sự rõ ràng về đầu vào/đầu ra và sự cô lập giữa các bước giúp CWL linh hoạt, hiệu quả và nhanh chóng.
- Guix Workflow Language (GWL): GWL mở rộng trình quản lý gói chức năng GNU Guix với khả năng quản lý quy trình. GWL và GNU Guix liên kết chặt chẽ, đảm bảo mô tả và triển khai tốt các chương trình tham gia. GWL tính toán một mã băm (hash) duy nhất trên toàn bộ tập hợp đầu vào, quy trình xây dựng gói và công cụ thực thi, đảm bảo rằng workflow chạy với cùng các gói phần mềm và quy trình chính xác.
- Snakemake: Snakemake là một hệ thống quản lý quy trình được sử dụng rộng rãi khác, viết bằng Python và lấy cảm hứng từ GNU Make. Nó sử dụng các quy tắc để mô tả các bước cần thiết tạo ra đầu vào/đầu ra. Snakemake xây dựng một đồ thị (graph) dựa trên sự phụ thuộc giữa đầu vào/đầu ra và chỉ thực hiện các công việc chưa được làm hoặc kết quả đã lỗi thời (dựa trên dấu thời gian). Snakemake hỗ trợ tích hợp với Conda để quản lý gói phần mềm và với Singularity để chạy trong container.
- Nextflow: Nextflow là một framework và công cụ điều phối cho phép các quy trình phân tích có thể mở rộng và tái lập dễ dàng. Nó được viết bằng Groovy và cung cấp một DSL (Domain Specific Language) để mô tả các quy trình phức tạp một cách linh hoạt. Điểm khác biệt chính của Nextflow là mô hình lập trình luồng dữ liệu, trong đó các quy trình giao tiếp thông qua các kênh (channels). Điều này phù hợp với các khối lượng công việc phân tán lớn vì nó có khả năng chịu độ trễ (latency tolerance) và chống lỗi (error resilience). Nextflow hỗ trợ nhiều công nghệ container như Docker và Singularity, tích hợp với Git/GitHub để theo dõi thay đổi và đảm bảo tái lập. Nó cũng hỗ trợ nhiều công cụ quản lý thời gian và chạy trực tiếp trên đám mây AWS.
Đóng gói phần mềm và container hóa
Một yếu tố quan trọng giúp các hệ thống quy trình linh hoạt và có khả năng tái lập là việc quản lý các phụ thuộc phần mềm và môi trường thực thi. Điều này được giải quyết bằng cách sử dụng các hệ thống đóng gói phần mềm.
- Container: Container được hỗ trợ bởi các nhà cung cấp đám mây lớn và đóng vai trò quan trọng trong tính linh hoạt như: Docker, Singularity.
- Hệ thống phân phối phần mềm: Các hệ thống như Debian GNU/Linux (Debian), GNU Guix và Conda cung cấp các gói phần mềm tin sinh học sẵn có.
- Debian Med: Một dự án trong Debian đóng gói phần mềm cho y tế và nghiên cứu y sinh, cung cấp hơn 400 chương trình tin sinh học.
- GNU Guix: Một trình quản lý gói có cách tiếp cận nghiêm ngặt đối với quản lý phụ thuộc, cô lập các gói bằng giá trị băm (hash value) dựa trên tất cả các đầu vào. Điều này cho phép cài đặt nhiều phiên bản hoặc cấu hình khác nhau của cùng một phần mềm trên một hệ thống.
- Conda: Một trình quản lý gói đa nền tảng viết bằng Python, cho phép cài đặt phần mềm viết bằng bất kỳ ngôn ngữ nào. Dự án Bioconda cung cấp quyền truy cập vào hơn 2900 gói phần mềm cho tin sinh học.
Bằng cách đóng gói phần mềm thông qua các hệ thống phân phối công khai này, tạo quy trình có thể tái lập và chia sẻ bằng cách sử dụng các công cụ, các nhà tin sinh học không chỉ mất ít thời gian hơn bằng lý tưởng làm cho khoa học có thể tái lập.
Hướng đi trong tương lai
Các hệ thống được giới thiệu cho thấy các cách tiếp cận khác nhau để giải quyết vấn đề thực thi và tái lập. Việc lựa chọn công cụ phụ thuộc vào nhiều yếu tố, bao gồm nhu cầu về mức độ nghiêm ngặt của khả năng tái lập (Guix cung cấp mức cao nhất), kinh nghiệm lập trình (Snakemake dựa trên Python, Nextflow có DSL riêng), và môi trường thực thi (một số phù hợp hơn với HPC, số khác với đám mây). Tuy nhiên, tất cả đều mang lại lợi ích đáng kể so với việc quản lý quy trình bằng script thủ công.
Ưu điểm tổng thể của việc đóng gói phần mềm là khi môi trường triển khai và thực thi phần mềm được kiểm soát, logic của quy trình làm cho phân tích có thể được phát triển riêng biệt bằng cách sử dụng các quy trình mô tả. Sự tách biệt này cho phép cộng đồng xây dựng các quy trình “tốt nhất” có thể chia sẻ mà không cần quá lo lắng về kiến trúc hệ thống và môi trường cơ bản.
Khả năng tái lập là một mối quan tâm hàng đầu trong khoa học. Ngày nay, nhiều giải pháp đã có sẵn. Container cung cấp sự cô lập, nhưng có thể hoạt động như một “hộp đen”. Việc cập nhật các gói phần mềm trong quá trình xây dựng container có thể dẫn đến các phiên bản phần mềm khác nhau và do đó là các đồ thị phụ thuộc khác nhau. Chỉ có container GNU Guix cung cấp cái nhìn rõ ràng về nội dung của chúng nhờ vào cách quản lý phụ thuộc nghiêm ngặt của Guix. Conda cung cấp môi trường, nhưng thiếu tính cô lập quy trình và khả năng tái lập so với Guix.
Việc chạy quy trình trên đám mây mang lại hiệu suất và khả năng mở rộng tương tự như trên hạ tầng cục bộ, sau khi điều chỉnh khác biệt về phần cứng và tốc độ mạng. Điện toán đám mây ngày càng hấp dẫn cho việc mở rộng quy mô công việc tính toán và lưu trữ dữ liệu với chi phí giảm dần.
Kết luận
Bằng cách tận dụng các công cụ mạnh mẽ này, các nhà nghiên cứu tin sinh học có thể tập trung vào câu hỏi khoa học của mình, biết rằng phân tích của họ có thể mở rộng, đáng tin cậy và có thể được tái lập bởi bất kỳ ai khác.
Tài liệu tham khảo: https://pmc.ncbi.nlm.nih.gov/articles/PMC7613310/
LOBI Vietnam là công ty tiên phong trong lĩnh vực Đọc trình tự gen thế hệ mới NGS (Next Generation Sequencing) và Phân tích Tin sinh học. Liên hệ hotline/Zalo 092.510.8899 để biết thêm chi tiết.