
Trong Phần 1, chúng ta đã tìm hiểu các kiến thức nền tảng bằng cách xây dựng một cụm Slurm đơn node. Giờ là lúc mở rộng lên một cụm đa node sẵn sàng cho production với triển khai tự động, giám sát và cảnh báo.
Trong bài viết này, chúng ta sẽ dùng Ansible để tự động hóa toàn bộ quá trình triển khai, giúp nó có thể tái lặp và dễ bảo trì.
Chuyển từ thiết lập đơn node sang một cụm production đa node bao gồm:
Làm thủ công những việc này dễ sai sót và tốn thời gian. Các công cụ tự động hóa hạ tầng như Ansible, Puppet hay Terraform giải quyết vấn đề này. Chúng tôi chọn Ansible vì:
Để xem nhanh Ansible là gì, hãy xem video này https://www.youtube.com/watch?v=xRMPKQweySE
Hình 1: Kiến trúc chuẩn của một cụm Slurm đa node
Hình 1 ở trên cho thấy cách nhiều node có thể được thiết lập chỉ liên quan đến kiến trúc cụm Slurm. Tuy nhiên, trong production thực tế, có một số bước bổ sung cần thiết cho các dịch vụ bioinformatics, bao gồm: Lưu trữ chia sẻ và Giám sát. Nội dung sẽ được giải thích chi tiết hơn như bên dưới
Hình 2: Hệ thống lưu trữ chia sẻ chuẩn giữa nhiều node
Tại sao chúng ta cần hệ thống lưu trữ chia sẻ? Ý tưởng đơn giản là khi chúng ta chạy một job trên worker, nó cần truy cập dữ liệu. Sau đó, khi chúng ta ngừng làm việc hoặc yêu cầu một hệ thống tài nguyên cao hơn, chúng ta vẫn có thể truy cập dữ liệu. Trong các tác vụ nâng cao, chúng ta cần phân tích trên nhiều compute node, chúng ta cần dữ liệu thô, các tệp trung gian có thể được chia sẻ và lưu trữ để phân tích trên nhiều máy.
Thông thường, thiết lập chuẩn có thể được biểu diễn như trong Hình 2, với:
HOME, sau đó thư mục home của người dùng bạn sẽ khả dụng trên các node đích.
Hình 3: Hệ thống giám sát được thiết kế cho nhiều node để thu thập các chỉ số hệ thống và Slurm
Với vai trò quản trị viên của HPC, bạn không nên đăng nhập vào HPC rồi kiểm tra trạng thái của cụm. Theo Hình 3, thông thường, với HPC, quản trị viên sẽ:
executor=slurm
nó sẽ giúp tự động submit và giám sát các tác vụ, trong khi submit một job đơn với tài nguyên tính toán cao và chạy pipeline với executor=local sẽ lãng phí tài nguyên khi một vài bước không cần quá nhiều tài nguyên mà lại tốn thời gian chạy.Các chỉ số có thể được thu thập như thế nào:
promethus-node-exporter trên mỗi node, nó thu thập các chỉ số hệ thống và expose dưới dạng web api service tại https://<node name>:3000. Sau đó, head node có thể gửi
request để thu thập các chỉ số này.promethus-slurm-exporter trên node trong cụm Slurm. Nó thường là controller node.prometheus sẽ thu thập các chỉ số này và có thể là nguồn cho Grafana với dashboard được cấu hình để phân tích tương tác
HPC không phải lúc nào cũng hoạt động đúng. Nếu một worker không hoạt động, quản trị viên nên nhận thông báo càng sớm càng tốt thay vì chờ người dùng báo sự cố. Vì vậy, prometheus có thể
được tích hợp với alertmanager. Đơn giản, chúng ta có thể cấu hình quy tắc: Nếu chỉ số hệ thống không thể thu thập từ một node, nó không phản hồi, thì nên đánh dấu là node down và dứt khoát gửi tin nhắn cảnh báo đến
ứng dụng chat. Có thể là Slack hoặc Zalo (khu vực Việt Nam) để nhanh chóng khắc phục sự cố.
Có thể được thực hiện từng bước, qua:
Promethus, khi nó thấy điều kiện healthy bị thất bại, sẽ gọi API để cảnh báo quản trị viên và người dùnginventories lưu thông tin về cách máy bạn có thể kết nối và thiết lập trên các node, quyết định node nào nên được cấu hình làm controller, login, worker để cài các dịch vụ tương ứng.inventories và cài đặt/cấu hình phần mềm trên máy từ xa một cách tự động thay vì
đăng nhập thủ công vào từng node và cài phần mềmgit clone https://github.com/vieomics/omicslab-hpc -b 1.0.0cd omicslab-hpc# pixi is similar to conda# install piximake ${HOME}/.pixi/bin/pixi
# activate environmentpixi shell
# install dependencies, start up example instances with cluster os, support multiple version# bash scripts/setup.sh 22.04# bash scripts/setup.sh 20.04bash scripts/setup.sh 24.04# ormake vm-startScript này cài đặt:
alertmanager, Slack được dùng mặc định. Liên hệ với chúng tôi tại contact@omicslab.io để được cung cấp giải pháp tùy chỉnh nếu bạn muốn dùng giải pháp khác (Zalo, Discord, v.v.)Tạo một Slack App

Bật Incoming Webhooks
#cluster-alerts)


Kiểm tra Webhook thủ công
curl -X POST -H 'Content-type: application/json' \ --data '{"text":"Hello from Slurm cluster!"}' \ https://hooks.slack.com/services/YOUR/WEBHOOK/URLBạn sẽ thấy tin nhắn xuất hiện trong kênh Slack của mình!
Tạo inventories/hosts (hoặc sao chép từ inventories/hosts.example):
[slurm_master]controller-01 ansible_host=192.168.58.10
[slurm_worker]worker-01 ansible_host=192.168.58.11worker-02 ansible_host=192.168.58.12
[slurm:children]slurm_masterslurm_worker
\[all:vars] # remove the backflash that html turbopack failed to render as code blockansible_user=your_usernameslurm_password=secure_munge_passwordslurm_account_db_pass=secure_db_passwordslack_api_url=https://hooks.slack.com/services/YOUR/WEBHOOK/URLslack_channel=#cluster-alertsadmin_user=adminadmin_password=secure_grafana_passwordDùng Ansible Vault để mã hóa các biến nhạy cảm như mật khẩu và API key.
# create encrypted vault, add your vault password, content, then exit with vim key :wqansible-vault create inventories/hosts.prod
# edit exisiting files, add your vault password to work directly insideansible-vault edit inventories/hosts.proddefault_password=temporary_user_password # Forces change on first loginusers=alice,bob,charlie # Comma-separated listGiờ đến khoảnh khắc kỳ diệu - triển khai toàn bộ cụm của bạn bằng một lệnh duy nhất!
# If you have passwordless sudo configuredansible-playbook -i inventories/hosts cluster_slurm.yml
# If you need to enter sudo passwordansible-playbook -i inventories/hosts cluster_slurm.yml --ask-become-pass --ask-vault-passPlaybook này làm gì:
ansible-playbook -i inventories/hosts cluster_account.ymlViệc này tạo Linux user trên tất cả các node với:
Với production, hãy cân nhắc tích hợp với LDAP hoặc Active Directory. Tuy nhiên, việc thiết lập NIS và LDAP có thể phức tạp trên Ubuntu. Cách tiếp cận Ansible của chúng tôi cung cấp một giải pháp thay thế đơn giản hơn, hoạt động tốt cho các cụm nhỏ đến trung bình.
SSH vào controller node và chạy:
# Check cluster statussinfo
# Expected output:# PARTITION AVAIL TIMELIMIT NODES STATE NODELIST# compute* up infinite 2 idle worker-01,worker-02
# View job queuesqueue
# Submit a test jobsrun --nodes=1 --ntasks=1 hostname
# Check accountingsacct
# View cluster configurationscontrol show config | head -20Grafana chạy trên controller node ở cổng 3000. Để truy cập nó một cách an toàn từ máy cục bộ của bạn:
# Create SSH tunnelssh -N -L 3001:localhost:3000 your_user@controller_ip
# Now open in browser: http://localhost:3001# Login: admin / your_grafana_passwordBạn sẽ thấy các dashboard cấu hình sẵn hiển thị:


Alertmanager được cấu hình để gửi thông báo Slack cho:
Ví dụ cảnh báo trong Slack khi một node down:

Để biết thông tin chi tiết, hãy xem dashboard Grafana:

Hãy chạy một số bài kiểm thử để đảm bảo mọi thứ hoạt động:
srun hostnamesrun --nodes=2 --ntasks=2 hostnamesrun --nodes=1 --cpus-per-task=2 --mem=2G --pty bash
# Inside the sessionhostnamenprocfree -hexitTạo test_job.sh:
#!/bin/bash#SBATCH --job-name=test#SBATCH --output=test_%j.out#SBATCH --error=test_%j.err#SBATCH --nodes=1#SBATCH --ntasks=1#SBATCH --cpus-per-task=2#SBATCH --mem=1G#SBATCH --time=00:05:00
echo "Job started at $(date)"echo "Running on node: $(hostname)"echo "CPUs allocated: $SLURM_CPUS_PER_TASK"echo "Memory allocated: $SLURM_MEM_PER_NODE MB"
# Do some worksleep 60
echo "Job finished at $(date)"Submit nó:
sbatch test_job.sh
# Check statussqueue
# When done, view outputcat test_*.out# Submit job requesting more resources than availablesrun --mem=999999 --pty bash
# Should fail with:# srun: error: Unable to allocate resources: Requested node configuration is not available# View your jobssacct
# Detailed accounting infosacct --format=JobID,JobName,User,State,Start,End,Elapsed,CPUTime,MaxRSS
# Cluster usage summarysreport cluster utilizationTrong bài viết này, chúng ta đã đề cập:
Trong Phần 3, chúng ta sẽ đề cập các tác vụ quản trị hằng ngày, khắc phục sự cố, best practice về bảo mật và quản lý tài nguyên nâng cao.
1.Slurm Overview — Tài liệu chính thức cho Slurm workload manager
2.NVIDIA/deepops — Bộ công cụ triển khai cụm mã nguồn mở (giấy phép BSD-3-Clause)
3.elasticluster — Công cụ cung cấp cụm đàn hồi (giấy phép GPL-3.0)
4.Ansible- Ansible cho IT Automation DevOps
5.GitHub Repository-Omicslab HPC- Các script Ansible để thiết lập Slurm HPC
Đây là Phần 2 của chuỗi Omicslab về xây dựng cụm Slurm HPC. Tiếp tục đến Phần 3 để tìm hiểu về quản trị và các best practice.
