Elastic Remote Direct Memory Access (eRDMA) adalah teknologi jaringan berperforma tinggi yang dapat digunakan dalam kontainer Docker. Teknologi ini memungkinkan aplikasi kontainer melewati kernel dan langsung mengakses perangkat eRDMA fisik di host. eRDMA membantu meningkatkan efisiensi transfer data dan komunikasi, cocok untuk skenario yang melibatkan transfer data berskala besar dan komunikasi jaringan berperforma tinggi dalam kontainer. Topik ini menjelaskan cara menggunakan gambar kontainer eRDMA untuk mengonfigurasi eRDMA secara efisien pada instans yang dipercepat GPU.
Jika bisnis Anda memerlukan kemampuan layanan jaringan RDMA berskala besar, Anda dapat membuat dan melampirkan antarmuka RDMA elastis (ERI) ke instans yang dipercepat GPU dari jenis instans yang mendukung eRDMA. Untuk informasi lebih lanjut, lihat Ikhtisar.
Sebelum Anda mulai
Anda harus memperoleh detail gambar kontainer eRDMA untuk mengonfigurasi gambar kontainer pada instans yang dipercepat GPU dengan mudah. Misalnya, tentukan jenis instans yang dipercepat GPU untuk mana gambar kontainer tersedia sebelum membuat instans tersebut, serta alamat gambar sebelum menarik gambar kontainer.
Masuk ke Konsol Container Registry.
Di panel navigasi di sebelah kiri, klik Artifact Center.
Masukkan
erdmadi kotak pencarian Repository Name dan tekan tombol Enter. Temukan dan klik gambar kontaineregs/erdma.Gambar ini diperbarui setiap tiga bulan sekali. Tabel berikut menjelaskan detail gambar kontainer eRDMA.
Nama Gambar
Informasi Versi
Alamat Gambar
Instans yang Dipercepat GPU yang Tersedia
Manfaat
eRDMA
Python: 3.10.12
CUDA: 12.4.1
cuDNN: 9.1.0.70
NCCL: 2.21.5
Gambar dasar: Ubuntu 22.04
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.4.1-cudnn9-ubuntu22.04
Gambar kontainer eRDMA hanya mendukung instans yang dipercepat GPU generasi kedelapan, seperti instans ebmgn8is dan gn8is.
CatatanUntuk informasi lebih lanjut tentang instans yang dipercepat GPU, lihat GPU-accelerated compute-optimized instance families (gn, ebm, and scc series).
Anda dapat langsung mengakses jaringan eRDMA Alibaba Cloud dari kontainer.
Alibaba Cloud menyediakan eRDMA, driver, dan CUDA yang sesuai untuk mendukung fitur siap pakai.
eRDMA
Python: 3.10.12
CUDA: 12.1.1
cuDNN: 8.9.0.131
NCCL: 2.17.1
Gambar dasar: Ubuntu 22.04
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04
Prosedur
Setelah menginstal Docker pada instans yang dipercepat GPU dan menggunakan eRDMA dalam kontainer Docker, Anda dapat langsung mengakses perangkat eRDMA dari kontainer. Dalam contoh ini, sistem operasi Ubuntu 20.04 digunakan.
Buat instans yang dipercepat GPU dan konfigurasikan eRDMA.
Untuk informasi lebih lanjut tentang operasi tersebut, lihat Aktifkan eRDMA pada Instans yang Dipercepat GPU.
Disarankan untuk menggunakan Konsol Elastic Compute Service (ECS) guna membuat instans yang dipercepat GPU yang dikonfigurasi dengan ERI. Saat melakukan operasi tersebut, pilih Auto-install GPU Driver dan Auto-install eRDMA Software Stack.
CatatanSaat membuat instans yang dipercepat GPU, sistem secara otomatis menginstal driver Tesla, CUDA, pustaka cuDNN, dan tumpukan perangkat lunak eRDMA. Metode ini lebih cepat dibandingkan instalasi manual.

Hubungkan ke instans yang dipercepat GPU.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk Terhubung ke Instans Linux melalui SSH.
Jalankan perintah berikut untuk menginstal Docker pada instans Ubuntu yang dipercepat GPU:
sudo apt-get update sudo apt-get -y install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.ioJalankan perintah berikut untuk memeriksa apakah Docker telah diinstal:
docker -vJalankan perintah berikut untuk menginstal paket perangkat lunak nvidia-container-toolkit:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkitJalankan perintah berikut secara berurutan untuk memulai Docker saat startup sistem dan kemudian restart layanan Docker:
sudo systemctl enable docker sudo systemctl restart dockerJalankan perintah berikut untuk menarik gambar kontainer eRDMA:
sudo docker pull egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04Jalankan perintah berikut untuk menjalankan kontainer eRDMA:
sudo docker run -d -t --network=host --gpus all \ --privileged \ --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \ --name erdma \ -v /root:/root \ egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04
Uji dan verifikasi eRDMA
Bagian ini memberikan contoh cara menguji eRDMA pada dua instans yang dipercepat GPU bernama host1 dan host2. Dalam contoh ini, Docker diinstal pada instans, dan kontainer eRDMA berjalan seperti yang diharapkan dalam Docker.
Periksa secara terpisah apakah perangkat eRDMA dalam kontainer host1 dan host2 bekerja seperti yang diharapkan.
Jalankan perintah berikut untuk mengakses kontainer:
sudo docker exec -it erdma bashJalankan perintah berikut untuk melihat informasi tentang perangkat eRDMA dalam kontainer:
ibv_devinfoKeluaran berikut menunjukkan bahwa dua perangkat eRDMA berada dalam status
PORT_ACTIVE. Ini menunjukkan bahwa perangkat bekerja seperti yang diharapkan.
Jalankan kode uji dalam file nccl-test host1 dan host2 di dalam kontainer.
Jalankan perintah berikut untuk mengunduh kode uji dalam file nccl-test:
git clone https://github.com/NVIDIA/nccl-tests.gitJalankan perintah berikut untuk mengompilasi kode uji:
apt update apt install openmpi-bin libopenmpi-dev -y cd nccl-tests && make MPI=1 CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local/cuda MPI_HOME=/usr/lib/x86_64-linux-gnu/openmpiBuat koneksi bebas kata sandi antara host1 dan host2 dan konfigurasikan koneksi SSH pada port 12345.
Tunggu hingga koneksi SSH dikonfigurasi. Kemudian, jalankan perintah
ssh -p 12345 ipdi dalam kontainer untuk menguji apakah koneksi bebas kata sandi antara host1 dan host2 dapat dibuat.Jalankan perintah berikut di dalam kontainer host1 untuk menghasilkan kunci SSH dan menyalin kunci publik ke kontainer host2:
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}Jalankan perintah berikut di dalam kontainer host2 untuk menginstal layanan SSH dan atur port mendengarkan server SSH menjadi
12345:apt-get update && apt-get install ssh -y mkdir /run/sshd /usr/sbin/sshd -p 12345Jalankan perintah berikut di dalam kontainer host1 untuk menguji apakah koneksi bebas kata sandi ke kontainer host2 dapat dibuat:
ssh root@{host2} -p 12345
Jalankan kode uji file all_reduce_perf di dalam kontainer host1:
mpirun --allow-run-as-root -np 16 -npernode 8 -H 172.16.15.237:8,172.16.15.235:8 \ --bind-to none -mca btl_tcp_if_include eth0 \ -x NCCL_SOCKET_IFNAME=eth0 \ -x NCCL_IB_DISABLE=0 \ -x NCCL_IB_GID_INDEX=1 \ -x NCCL_NET_GDR_LEVEL=5 \ -x NCCL_DEBUG=INFO \ -x NCCL_ALGO=Ring -x NCCL_P2P_LEVEL=3 \ -x LD_LIBRARY_PATH -x PATH \ -mca plm_rsh_args "-p 12345" \ /workspace/nccl-tests/build/all_reduce_perf -b 1G -e 1G -f 2 -g 1 -n 20Gambar berikut menunjukkan keluarannya.

Jalankan perintah berikut untuk memeriksa apakah lalu lintas ditransmisikan melalui jaringan eRDMA di host (di luar kontainer):
eadm stat -d erdma_0 -lKeluaran berikut menunjukkan bahwa lalu lintas ditransmisikan melalui jaringan eRDMA.

Referensi
Anda dapat mengonfigurasi eRDMA pada instans yang dipercepat GPU sehingga instans yang dipercepat GPU dalam virtual private cloud (VPC) dapat terhubung satu sama lain dengan cepat berdasarkan RDMA. Untuk informasi lebih lanjut tentang operasi tersebut, lihat Aktifkan eRDMA pada Instans yang Dipercepat GPU.
Dalam skenario yang melibatkan transfer data berskala besar dan komunikasi jaringan berperforma tinggi, Anda mungkin perlu menggunakan eRDMA dalam kontainer Docker pada instans yang dipercepat GPU untuk meningkatkan efisiensi transfer data dan komunikasi. Untuk informasi lebih lanjut, lihat Aktifkan eRDMA dalam Kontainer Docker.