全部产品
Search
文档中心

Container Service for Kubernetes:Kirim pekerjaan pelatihan terdistribusi PyTorch yang dipercepat eRDMA menggunakan Arena

更新时间:Nov 11, 2025

Dalam pelatihan GPU multi-node, latensi komunikasi jaringan dapat menjadi bottleneck performa. Untuk memperpendek siklus pelatihan model, Anda dapat menggunakan Arena untuk mengirim pekerjaan pelatihan terdistribusi PyTorch dan mengaktifkan elastic Remote Direct Memory Access (eRDMA) guna mempercepat komunikasi jaringan. Konfigurasi ini menyediakan komunikasi antar-node dengan latensi rendah dan throughput tinggi, sehingga meningkatkan efisiensi pelatihan dan pemanfaatan kluster.

Penerapan

  • Jenis kluster: Hanya ACK managed clusters yang didukung.

  • Tipe instans yang mendukung elastic Remote Direct Memory Access (eRDMA):

    • gn8is, ebmgn8is, gn8v, ebmgn8v

Langkah 1: Instal ACK eRDMA Controller

Ikuti langkah-langkah berikut untuk menginstal ACK eRDMA Controller.

Catatan
  • Jika kluster ACK Anda menggunakan Terway, konfigurasikan filter elastic network interface (ENI) untuk Terway agar tidak mengubah ENI eRDMA. Untuk informasi selengkapnya, lihat Konfigurasikan filter untuk ENI.

  • Jika sebuah node memiliki beberapa ENI, ACK eRDMA Controller mengonfigurasi entri rute untuk ENI tambahan eRDMA dengan prioritas lebih rendah dibandingkan entri rute untuk ENI dalam blok CIDR yang sama, menggunakan prioritas perutean default 200. Jika Anda perlu mengonfigurasi ENI secara manual setelah menginstal ACK eRDMA Controller, pastikan untuk menghindari konflik perutean.

  1. Pada halaman Clusters, temukan kluster yang ingin Anda kelola lalu klik namanya. Di panel navigasi kiri, klik Add-ons.

  2. Pada halaman Add-ons, klik tab Networking, temukan ACK eRDMA Controller, lalu ikuti petunjuk di halaman tersebut untuk mengonfigurasi dan menginstal komponen.

    Parameter

    Deskripsi

    preferDriver Driver type

    Pilih tipe driver eRDMA yang digunakan pada node kluster. Nilai yang valid:

    • default: Mode driver default.

    • compat: Mode driver yang kompatibel dengan RDMA over Converged Ethernet (RoCE).

    • ofed: Mode driver berbasis ofed, yang berlaku untuk model GPU.

    Untuk informasi selengkapnya tentang jenis-jenis driver, lihat Aktifkan eRDMA.

    Specifies whether to assign all eRDMA devices of nodes to pods

    Nilai yang valid:

    • True: Jika Anda memilih kotak centang ini, semua perangkat eRDMA pada node dialokasikan ke pod.

    • False: Jika Anda tidak memilih kotak centang ini, pod dialokasikan satu perangkat eRDMA berdasarkan topologi akses memori non-seragam (NUMA). Anda harus mengaktifkan kebijakan CPU statis untuk node guna memastikan NUMA dapat dialokasikan ke pod dan perangkat. Untuk informasi selengkapnya tentang cara mengonfigurasi kebijakan CPU, lihat Buat dan kelola kelompok node.

    Di panel navigasi sebelah kiri, pilih Workloads > Pods. Pada halaman Pods, pilih namespace ack-erdma-controller untuk melihat status pod dan memastikan komponen berjalan sesuai harapan.

Langkah 2: Aktifkan dan verifikasi eRDMA pada node

Aktifkan eRDMA pada node dan verifikasi bahwa sumber daya GPU dan eRDMA pada node terdeteksi serta tersedia untuk penjadwalan.
  1. Aktifkan eRDMA pada instans GPU-accelerated.

  2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Pods. Pada baris pod yang Anda buat, klik Terminal di kolom Actions. Masuk ke node yang mendukung eRDMA dan jalankan perintah berikut untuk melihat informasi perangkat eRDMA.

    Jika output menampilkan perangkat erdma_0 dan status port-nya adalah PORT_ACTIVE, perangkat eRDMA telah diaktifkan.

    ibv_devinfo
  3. Lihat sumber daya yang dapat dialokasikan dari node.

    kubectl get node <node_name> -o jsonpath='{.status.allocatable}'

    Contoh output:

    {"aliyun/erdma":"200","cpu":"15890m","ephemeral-storage":"243149919035","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"128290128Ki","nvidia.com/gpu":"1","pods":"64"}
    • "nvidia.com/gpu":"1": Menunjukkan bahwa satu GPU tersedia.

    • "aliyun/erdma":"200": Menunjukkan bahwa hingga 200 pod dapat menggunakan eRDMA.

Langkah 3: Kirim pekerjaan pelatihan menggunakan Arena

Gunakan Arena untuk mengirim pekerjaan pelatihan terdistribusi PyTorch dan minta sumber daya eRDMA guna mempercepat komunikasi antar-node.
  1. Instal komponen Arena dari Cloud Native AI Suite.

  2. Konfigurasikan klien Arena dan kirim pekerjaan pelatihan. Untuk informasi selengkapnya tentang parameter, lihat Parameter inti pekerjaan.

    Topik ini menggunakan citra pre-built kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch:mnist-example untuk tujuan demonstrasi. Citra ini hanya untuk percobaan. Untuk lingkungan produksi, lihat Bagaimana cara membuat gambar kontainer yang mendukung eRDMA untuk lingkungan produksi?
    arena submit pytorch \
        --name=pytorch-mnist \
        --namespace=default \
        --workers=2 \
        --gpus=1 \
        --device=aliyun/erdma=1 \
        --nproc-per-node=1 \
        --env NCCL_NET_GDR_LEVEL=1 \
        --env NCCL_P2P_LEVEL=5 \
        --env NCCL_DEBUG=INFO \
        --env NCCL_SOCKET_IFNAME=eth0 \
        --env NCCL_ALGO=Ring \
        --clean-task-policy=None \
        --working-dir=/root \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch:mnist-example \
        --image-pull-policy=Always \
        --tensorboard \
        --logdir=/workspace/logs \
        "torchrun /workspace/arena/examples/pytorch/mnist/main.py \
            --epochs 10000 \
            --backend nccl \
            --data /workspace \
            --dir /workspace/logs"

Langkah 4: Verifikasi status pekerjaan pelatihan

Konfirmasi bahwa pekerjaan pelatihan telah dimulai dan jaringan eRDMA aktif.
  1. Dapatkan KubeConfig kluster dan gunakan kubectl untuk terhubung ke kluster.

  2. Lihat log pod Master. Jika log pelatihan menampilkan informasi Train Epoch, pekerjaan pelatihan berjalan dengan benar.

    kubectl logs pytorch-mnist-master-0 | head -n 50
  3. Verifikasi bahwa eRDMA aktif. Cari pesan NET/IB : Using [0]erdma_0:1/RoCE dalam log pod Master. Kehadiran baris ini menunjukkan hal berikut:

    • NCCL berhasil mendeteksi network interface card eRDMA (erdma_0).

    • Protokol RoCE (RDMA over Converged Ethernet) digunakan untuk komunikasi.

    • Komunikasi antar-node untuk pelatihan terdistribusi dipercepat oleh eRDMA.

Langkah 5: Pantau lalu lintas network interface card eRDMA

Pantau lalu lintas network interface card eRDMA secara real-time untuk memverifikasi transmisi data.
  1. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Pods. Pada baris pod yang Anda buat, klik Terminal di kolom Actions. Masuk ke node pelatihan dan jalankan perintah berikut untuk memantau lalu lintas network interface card eRDMA.

    eadm stat -d erdma_0 -l

    Output yang diharapkan mirip dengan rx (download): 914,89 MiB/s 150423 p/s; tx (upload):914,66 MiB/s 147128 p/s. Jika Anda melihat lalu lintas dua arah yang berkelanjutan untuk upload dan download selama pelatihan, hal ini menunjukkan bahwa operasi komunikasi, seperti sinkronisasi gradien, sedang terjadi antar-node.

  2. Untuk petunjuk cara menganalisis performa pelatihan, lihat .

    Kluster ACK menyediakan fitur AI Profiling, yang memungkinkan Anda menganalisis performa pelatihan di berbagai tingkatan, seperti Torch, Python, dan CUDA Kernel. Anda dapat menggunakan alat profiling untuk menganalisis bottleneck performa dalam pekerjaan pelatihan, termasuk komputasi, komunikasi, dan penggunaan memori.

Bersihkan sumber daya

Setelah pekerjaan pelatihan selesai, jalankan perintah berikut untuk menghapus pekerjaan:

Operasi ini menghapus semua pod dan sumber daya terkait pekerjaan tetapi tidak menghapus data persisten, seperti log TensorBoard.
arena delete pytorch-mnist -n default

Contoh output:

INFO[0001] The training job pytorch-mnist has been deleted successfully

FAQ

Mengapa log tidak menampilkan NET/IB : Using erdma_0?

Kemungkinan penyebabnya meliputi:

  • Parameter --device=aliyun/erdma=1 tidak ditambahkan ke perintah pengiriman.

  • Node tidak mendukung eRDMA, atau komponen eRDMA Controller tidak diinstal dengan benar.

  • Gambar kontainer tidak memiliki pustaka mode pengguna RDMA, seperti `libibverbs` dan `librdmacm`.

Solusi:

  1. Jalankan kubectl get node <node_name> -o jsonpath='{.status.allocatable}' untuk memastikan node memiliki sumber daya aliyun/erdma.

  2. Masuk ke node dan jalankan ibv_devinfo untuk memeriksa apakah perangkat eRDMA berfungsi dengan benar.

  3. Verifikasi bahwa gambar kontainer berisi pustaka RDMA yang diperlukan.

Apa yang harus saya lakukan jika terjadi kesalahan timeout NCCL selama pelatihan?

Timeout NCCL biasanya disebabkan oleh ketidakstabilan jaringan atau konfigurasi yang salah. Untuk mengatasi masalah ini, Anda dapat mencoba hal berikut:

  1. Tingkatkan periode timeout: Tetapkan --env NCCL_IB_TIMEOUT=23 (default adalah 22).

  2. Tingkatkan jumlah percobaan ulang: Tetapkan --env NCCL_IB_RETRY_CNT=10.

  3. Periksa konektivitas jaringan antar-node dan status perangkat eRDMA.

Bagaimana cara menentukan apakah eRDMA telah meningkatkan performa pelatihan?

Anda dapat membandingkan performa dengan langkah-langkah berikut:

  1. Kirim dua pekerjaan pelatihan: satu yang menggunakan eRDMA dan satu yang tidak. Anda dapat membedakannya dengan menambahkan atau menghilangkan parameter --device=aliyun/erdma=1.

  2. Bandingkan waktu penyelesaian untuk jumlah langkah pelatihan yang sama.

  3. Gunakan alat AI Profiling untuk menganalisis proporsi waktu yang dihabiskan untuk komunikasi.

Umumnya, peningkatan performa dari eRDMA paling signifikan dalam skenario dengan banyak node (lebih dari dua) dan model besar (miliaran parameter atau lebih).

Apa yang harus saya lakukan jika pengiriman pekerjaan Arena gagal dengan kesalahan sumber daya tidak mencukupi?

Kemungkinan penyebabnya meliputi:

  • Sumber daya GPU atau eRDMA tidak mencukupi.

  • Node tidak memenuhi kondisi penjadwalan, seperti selector node atau toleransi taint.

Solusi:

  1. Jalankan kubectl get nodes untuk melihat status node dan sumber daya yang tersedia.

  2. Jalankan kubectl describe pod <pod_name> untuk melihat alasan detail kegagalan penjadwalan pod.

  3. Sesuaikan permintaan sumber daya atau tambahkan lebih banyak node untuk memenuhi persyaratan.

Parameter inti pekerjaan

Parameter

Deskripsi

Konfigurasi yang direkomendasikan

--name

Nama pekerjaan, yang harus unik dalam kluster.

Gunakan nama yang spesifik untuk bisnis.

--namespace

Namespace tempat pekerjaan berada.

Isolasi berdasarkan tim atau proyek.

--workers

Jumlah node pekerja, termasuk node Master.

Atur ke 2 untuk satu Master dan satu pekerja.

--gpus

Jumlah GPU yang digunakan oleh setiap pekerja.

Atur berdasarkan ukuran model dan kebutuhan memori GPU.

--device=aliyun/erdma=1

Parameter utama untuk mengaktifkan eRDMA. Parameter ini mengalokasikan satu sumber daya eRDMA ke setiap pekerja.

Harus diatur ke 1 untuk mengaktifkan eRDMA.

--nproc-per-node

Jumlah proses pelatihan yang akan dimulai pada setiap node.

Umumnya diatur ke nilai yang sama dengan --gpus.

--clean-task-policy

Kebijakan pembersihan pod.

Atur ke None untuk menyimpan pod guna pemeriksaan log.

--env

Variabel lingkungan.

Digunakan untuk mengonfigurasi parameter komunikasi NCCL.

Konfigurasi variabel lingkungan NCCL (untuk mengoptimalkan komunikasi terdistribusi):

Variabel lingkungan

Deskripsi

Konfigurasi yang direkomendasikan

NCCL_SOCKET_IFNAME

Menentukan network interface card untuk komunikasi.

Atur ke eth0 (network interface card default untuk kluster ACK).

NCCL_NET_GDR_LEVEL

Tingkat kebijakan GPU Direct RDMA (0-5).

Dalam skenario eRDMA, atur ke 1 (tingkat PIX).

NCCL_P2P_LEVEL

Kebijakan komunikasi peer-to-peer (0-5).

Atur ke 5 (tingkat SYS) untuk mendukung komunikasi lintas-node.

NCCL_ALGO

Algoritma komunikasi kolektif.

Opsi meliputi Ring dan Tree. Pilih salah satu berdasarkan topologi jaringan.

NCCL_DEBUG

Tingkat log.

Atur ke INFO untuk debugging. Untuk lingkungan produksi, Anda dapat mengubahnya ke WARN.

NCCL_IB_HCA

Menentukan network interface card RDMA yang akan digunakan.

Gunakan ibstat untuk melihat nama network interface card yang tersedia.

NCCL_IB_TIMEOUT

Periode timeout komunikasi InfiniBand (IB).

Sesuaikan berdasarkan latensi jaringan.

NCCL_IB_RETRY_CNT

Jumlah percobaan ulang untuk komunikasi IB yang gagal.

Anda dapat menambahkan nilai ini untuk jaringan yang tidak stabil.

Untuk informasi selengkapnya tentang variabel lingkungan NCCL, lihat dokumentasi resmi NCCL.

Bagaimana cara membuat gambar kontainer yang mendukung eRDMA untuk lingkungan produksi?

Untuk menggunakan eRDMA, Anda harus menginstal pustaka dan driver mode pengguna RDMA dalam kontainer. Contoh Dockerfile berikut didasarkan pada citra PyTorch resmi dan mengintegrasikan driver eRDMA serta contoh pelatihan MNIST.

Buat gambar kontainer produksi yang mendukung eRDMA. Untuk informasi selengkapnya, lihat Aktifkan eRDMA dalam kontainer (Docker).
ARG PYTORCH_IMAGE=docker.io/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime

FROM docker.io/library/alpine:3.22.1 AS downloader

WORKDIR /workspace

RUN apk add git wget gzip

RUN mkdir -p /workspace/MNIST/raw && \
    cat <<EOF > /workspace/MNIST/raw/checksums.md5
f68b3c2dcbeaaa9fbdd348bbdeb94873 train-images-idx3-ubyte.gz
d53e105ee54ea40749a09fcbcd1e9432 train-labels-idx1-ubyte.gz
9fb629c4189551a2d022fa330f9573f3 t10k-images-idx3-ubyte.gz
ec29112dd5afa0611ce80d1b7f02629c t10k-labels-idx1-ubyte.gz
EOF

RUN cd /workspace/MNIST/raw && \
    wget https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz && \
    wget https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz && \
    wget https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz && \
    wget https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz && \
    md5sum -c checksums.md5 && \
    rm checksums.md5 && \
    gzip -d *.gz

RUN git clone https://github.com/kubeflow/arena.git -b v0.15.2

FROM ${PYTORCH_IMAGE}

WORKDIR /workspace

COPY --from=downloader /workspace .

RUN set -eux && \
    apt update && \
    apt install -y wget gpg && \
    wget -qO - https://mirrors.aliyun.com/erdma/GPGKEY | gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg && \
    echo "deb [ ] https://mirrors.aliyun.com/erdma/apt/ubuntu jammy/erdma main" > /etc/apt/sources.list.d/erdma.list && \
    apt update && \
    apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 && \
    pip install --no-cache-dir -r /workspace/arena/examples/pytorch/mnist/requirements.txt && \
    rm -rf /var/lib/apt/lists/*