Mengintegrasikan eRDMA ke dalam lingkungan kontainer (Docker) memungkinkan aplikasi melewati kernel sistem operasi dan langsung mengakses perangkat eRDMA fisik host. Hal ini mempercepat transfer data dan komunikasi, sehingga ideal untuk aplikasi berbasis kontainer yang memerlukan transfer data skala besar dan jaringan berkinerja tinggi. Topik ini menjelaskan cara menggunakan gambar kontainer eRDMA untuk mengonfigurasi eRDMA dengan cepat pada instans yang dipercepat GPU.
Jika layanan Anda memerlukan kemampuan jaringan RDMA skala besar, Anda dapat menyambungkan antarmuka RDMA elastis (ERI) ke tipe instans yang dipercepat GPU yang didukung. Untuk informasi selengkapnya, lihat Ikhtisar eRDMA.
Sebelum memulai
Sebelum mengonfigurasi gambar kontainer eRDMA pada instans yang dipercepat GPU, pastikan Anda telah mengetahui detail berikut: tipe instans yang dipercepat GPU yang didukung sebelum membuat instans, serta alamat gambarnya sebelum menarik (pull) gambar tersebut.
Login ke Konsol Container Registry.
Pada panel navigasi di sebelah kiri, klik Artifact Center.
Pada kotak pencarian Repository Name, masukkan
erdmadan pilih gambar targetegs/erdma.Gambar kontainer eRDMA diperbarui kira-kira setiap tiga bulan. Tabel berikut menyediakan detail gambar tersebut.
Image name
Version information
Image address
Supported instances
Benefits
eRDMA
Python: 3.10.12
CUDA: 12.4.1
cuDNN: 9.1.0.70
NCCL: 2.21.5
Base image: Ubuntu 22.04
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.4.1-cudnn9-ubuntu22.04
Gambar kontainer eRDMA mendukung semua instans generasi ke-8 yang dipercepat GPU, seperti ebmgn8is dan gn8is.
CatatanUntuk informasi lebih lanjut tentang instans, lihat GPU compute-optimized instance families.
Akses jaringan eRDMA Alibaba Cloud langsung dari dalam kontainer.
Dapatkan pengalaman siap pakai dengan eRDMA, driver, dan CUDA yang kompatibel.
eRDMA
Python: 3.10.12
CUDA: 12.1.1
cuDNN: 8.9.0.131
NCCL: 2.17.1
Base image: Ubuntu 22.04
egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04
Prosedur
Setelah Anda menginstal Docker pada instans yang dipercepat GPU dan mengaktifkan eRDMA di lingkungan Docker, Anda dapat langsung mengakses perangkat eRDMA dari dalam kontainer. Prosedur ini menggunakan Ubuntu 20.04 sebagai contoh.
Buat instans yang dipercepat GPU dan konfigurasikan eRDMA.
Untuk informasi selengkapnya, lihat Enable eRDMA on a GPU-accelerated instance.
Kami menyarankan agar Anda membuat instans yang dipercepat GPU dengan kartu jaringan eRDMA di Konsol ECS, serta memilih opsi Install GPU Driver dan Install eRDMA Software Stack.
CatatanSetelah instans yang dipercepat GPU dibuat, sistem secara otomatis menginstal driver Tesla, CUDA, pustaka cuDNN, dan tumpukan perangkat lunak eRDMA. Proses ini lebih cepat daripada instalasi manual.
Pada bagian Image, pilih Ubuntu 20.04 64-bit. Instalasi driver GPU memerlukan waktu sekitar 10 hingga 20 menit. Proses instalasi memperpanjang waktu startup instans dan mencakup restart otomatis.
Hubungkan ke instans yang dipercepat GPU.
Untuk petunjuk lengkap, lihat Connect to a Linux instance by using Workbench.
Jalankan perintah berikut untuk menginstal Docker pada instans GPU Ubuntu.
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 memverifikasi instalasi Docker.
docker -vJalankan perintah berikut untuk menginstal paket 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 untuk mengaktifkan Docker agar berjalan saat boot, lalu restart layanan Docker.
sudo systemctl enable docker sudo systemctl restart dockerJalankan perintah berikut untuk menarik (pull) 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
Verifikasi konfigurasi
Contoh ini menggunakan dua instans yang dipercepat GPU, yaitu host1 dan host2. Lingkungan Docker telah diinstal dan kontainer eRDMA berhasil berjalan di masing-masing instans.
Di dalam kontainer pada host1 dan host2, periksa apakah adaptor jaringan eRDMA berfungsi dengan baik.
Jalankan perintah berikut untuk masuk ke lingkungan kontainer.
sudo docker exec -it erdma bashJalankan perintah berikut untuk memeriksa perangkat jaringan eRDMA di dalam kontainer.
ibv_devinfoOutput menunjukkan status kedua perangkat jaringan eRDMA sebagai
PORT_ACTIVE, yang menandakan bahwa perangkat tersebut berfungsi dengan benar.root@xxx:~/# ibv_devinfo hca_id: erdma_0 transport: eRDMA (0) fw_ver: 0.2.0 node_guid: 0216:3eff:fe2c:6aad sys_image_guid: 0216:3eff:fe2c:6aad vendor_id: 0x1ded vendor_part_id: 4223 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 1024 (3) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet hca_id: erdma_1 transport: eRDMA (0) fw_ver: 0.2.0 node_guid: 0216:3eff:fe16:58b6 sys_image_guid: 0216:3eff:fe16:58b6 vendor_id: 0x1ded vendor_part_id: 4223 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 1024 (3) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
Di dalam kontainer, jalankan nccl-test pada host1 dan host2.
Jalankan perintah berikut untuk mengunduh kode nccl-tests.
git clone https://github.com/NVIDIA/nccl-tests.gitJalankan perintah berikut untuk mengompilasi nccl-tests.
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 tanpa password antara host1 dan host2, dan konfigurasikan SSH agar terhubung melalui port 12345.
Setelah koneksi SSH dikonfigurasi, Anda dapat menguji koneksi tanpa password antara kedua kontainer dengan menjalankan perintah
ssh -p 12345 ${host2}dari dalam kontainer.Di dalam kontainer pada host1, jalankan perintah berikut untuk menghasilkan kunci SSH dan menyalin kunci publik ke kontainer pada host2.
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}Di dalam kontainer pada host2, jalankan perintah berikut untuk menginstal layanan SSH dan mengatur port pendengaran server SSH menjadi
12345.apt-get update && apt-get install ssh -y mkdir /run/sshd /usr/sbin/sshd -p 12345Di dalam kontainer pada host1, jalankan perintah berikut untuk menguji koneksi tanpa password ke kontainer pada host2.
ssh root@${host2} -p 12345
Di dalam kontainer pada host1, jalankan uji all_reduce_perf.
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 20Outputnya mirip dengan berikut:
iZ2zei2cgn3427b89ubkfvZ:2732:2765 [7] NCCL INFO comm 0x562feba84040 rank 7 nranks 16 cudaDev 7 busId f1000 commId 0x89cad9815cd2a14b - Init COMPLETE iZ2zei2cgn3427b89ubkfvZ:2728:2770 [5] NCCL INFO comm 0x55d55c96d340 rank 5 nranks 16 cudaDev 5 busId ea000 commId 0x89cad9815cd2a14b - Init COMPLETE # # out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1073741824 268435456 float sum -1 158061 6.79 12.74 0 156821 6.85 12.84 0 iZ2zeiwklcnbixy8g0r8grZ:4068:4068 [2] NCCL INFO comm 0x563b4653f3c0 rank 10 nranks 16 cudaDev 2 busId 71000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2724:2724 [2] NCCL INFO comm 0x55c35266a000 rank 2 nranks 16 cudaDev 2 busId 71000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4071:4071 [5] NCCL INFO comm 0x563a86fc7210 rank 13 nranks 16 cudaDev 5 busId ea000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4067:4067 [1] NCCL INFO comm 0x559741cc9290 rank 9 nranks 16 cudaDev 1 busId 6a000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4075:4075 [7] NCCL INFO comm 0x55d60e86e170 rank 15 nranks 16 cudaDev 7 busId f1000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2723:2723 [1] NCCL INFO comm 0x5596ca34a0b0 rank 1 nranks 16 cudaDev 1 busId 6a000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2728:2728 [5] NCCL INFO comm 0x55d55c96d340 rank 5 nranks 16 cudaDev 5 busId ea000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4072:4072 [6] NCCL INFO comm 0x5609dddc4170 rank 14 nranks 16 cudaDev 6 busId f0000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2725:2725 [3] NCCL INFO comm 0x564411727220 rank 3 nranks 16 cudaDev 3 busId 72000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2726:2726 [4] NCCL INFO comm 0x557b9ed258a0 rank 4 nranks 16 cudaDev 4 busId e9000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4069:4069 [3] NCCL INFO comm 0x55b879b75000 rank 11 nranks 16 cudaDev 3 busId 72000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4070:4070 [4] NCCL INFO comm 0x557580c1a5f0 rank 12 nranks 16 cudaDev 4 busId e9000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2730:2730 [6] NCCL INFO comm 0x562b87361c0 rank 6 nranks 16 cudaDev 6 busId f0000 - Destroy COMPLETE iZ2zeiwklcnbixy8g0r8grZ:4066:4066 [0] NCCL INFO comm 0x558bf49799a0 rank 8 nranks 16 cudaDev 0 busId 69000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2722:2722 [0] NCCL INFO comm 0x5589a9d7a980 rank 0 nranks 16 cudaDev 0 busId 69000 - Destroy COMPLETE iZ2zei2cgn3427b89ubkfvZ:2732:2732 [7] NCCL INFO comm 0x562feba84040 rank 7 nranks 16 cudaDev 7 busId f1000 - Destroy COMPLETE # Out of bounds values : 0 OK # Avg bus bandwidth : 12.7876 #
Di host (di luar kontainer), jalankan perintah berikut untuk memantau lalu lintas pada jaringan eRDMA.
eadm stat -d erdma_0 -lOutput menunjukkan adanya lalu lintas pada jaringan eRDMA.
root@xxxZ:~# eadm stat -d erdma_0 -l Monitoring erdma_0... (press CTRL-C to stop) 14:53:00 rx: 5.50 GiB/s 4537261 p/s tx: 5.49 GiB/s 4538210 p/s
Topik terkait
Untuk mengaktifkan konektivitas antar-instans yang dipercepat RDMA dalam virtual private cloud (VPC) yang sama, Anda dapat mengonfigurasi eRDMA pada instans yang dipercepat GPU. Untuk petunjuknya, lihat Enable eRDMA on GPU-accelerated instances.
Jika kasus penggunaan Anda melibatkan transfer data skala besar dan jaringan berkinerja tinggi, Anda dapat mengonfigurasi secara manual lingkungan Docker pada instans yang dipercepat GPU dan mengaktifkan eRDMA untuk meningkatkan efisiensi. Untuk petunjuknya, lihat Enable eRDMA in a Docker container.