Hệ thống GPU-Cluster

Một phần của tài liệu Nghiên cứu kiến trúc hệ thống tính toán hiệu năng cao đa dụng dựa trên card đồ họa (Trang 46 - 55)

GPU đã nhanh chóng phát triển nâng cao hiệu suất cho việc tính toán dữ liệu song song. GPU hiện đại chứa hàng trăm đơn vị xử lí, có khả năng đạt được lên tới 1 TFLOPS cho tính toán số học đơn (SP) và hơn 80 GFLOPS cho những tính toán chính xác kép (DP). Gần đây những GPU sử dụng tối ưu tính toán hiệu năng cao có thể chứa 4GB trong bộ nhớ, và có khả năng duy trì bộ nhớ vượt quá 100GB/sec. Cấu trúc ổ cứng song song lớn và hiệu suất cao của xử lý dấu chấm động số học và hoạt động của bộ nhớ trên GPU làm cho những cụm này đặc biệt phù hợp với nhiều khối lượng công việc khoa học và kỹ thuật sử dụng cụm tính toán hiệu năng cao.

Ngoài sức mạnh là chi phí hiệu quả của tính toán hiệu năng cao, GPU cũng có tiềm năng là làm giảm đáng kể không gian, điện năng tiêu thụ, hệ thống làm mát,… so với những hệ thống chỉ sử dụng CPU truyền thống với những khả năng tính toán và tổng hợp tương tự. Trong hỗ trợ của xu hướng này, NVIDIA đã bắt đầu sản xuất đại trà với loại card mang tên Tesla phù hợp cho sử dụng trong các cụm tính toán hiệu năng cao.

Mặc dù việc sử dụng thành công GPU để tăng tốc tính toán trong cụm tính toán hiệu năng cao có thể tạo những lợi thế nêu trên, chúng vẫn thể hiện một số thách thức mới trong quá trình phát triển, việc quản lí công việc và quản lý tài nguyên, và vấn đề bảo mật.

Kiến trúc GPU Cluster

Một số cụm GPU đã được triển khai trong thập kỷ trước, như những cài đặt thực nghiệm được tiến hành bởi GraphStream. Tuy nhiên, phần lớn trong số những thực nghiệm này đã được triển khai dạng thử nghiệm. Chỉ mới gần đây mới được thực hiện để triển khai các cụm tính toán GPU. Hai ví dụ đầu của những cài đặt đó bao gồm cụm GPU 160 nút "DQ" tại LANL và cụm GPU 16 nút "QP" tại NCSA, cả hai đều

dựa trên công nghệ NVIDIA QuadroPlex. Phần lớn những cài đặt này mang tính thử nghiệm chứ chưa được triển khai nhiều cho việc sản xuất trong môi trường tính toán hiệu năng cao.

Tại NCSA đã triển khai hai cụm GPU dựa trên Hệ thống Điện toán NVIDIA Tesla S1070: một cụm 192-nút "Lincoln" và một cụm thử nghiệm 32 nút "AC", cả hai cụm đã đi được thử nghiệm trong năm 2009.

Có ba thành phần chính được sử dụng trong một cụm GPU: các nút máy chủ, GPU và kết nối. Kể từ khi có những kỳ vọng vào GPU có thể thực hiện một phần đáng kể công việc tính toán, lưu trữ máy chủ, đường truyền PCIe và những đặc điểm kết nối mạng cần phải được kết hợp với GPU để duy trì một hệ thống cân bằng. Đặc biệt trong GPU cao cấp, chẳng hạn như NVIDIA Tesla, yêu cầu đầy đủ một PCIe Gen 2 khe cắm 16x mà không làm suy giảm tốc độ 8x khi được sử dụng nhiều GPU. Tỷ lệ một-một trong những lõi CPU và GPU có thể thực hiện được bằng phần mềm vì nó đơn giản hoá sự phát triển của các ứng dụng dựa vào PPI.

AC và Cluster Nodes Lincoln

Các nốt cluster của máy chủ AC là các máy trạm HP xw9400, mỗi máy trạm có chứa hai bộ xử lí lõi kép 2216 và 2,4 GHz AMD Opteron với 1 MB L2 cache và 1 liên kết HyperTransport, bộ nhớ 8 GB (4x2GB) DDR2-667 cho mỗi nút máy chủ.

Hình 2. 7. Cụm của node AC

Các máy chủ có hai khe PCIe Gen 1 khe cắm 16x và một khe cắm PCIe 8x. Các khe 16x được sử dụng để kết nối một hệ thống Tesla S1070 (4 GPU) và khe cắm 8x được sử dụng cho một thiết bị InfiniBand QDR. Hệ thống máy chủ HP xw9400 không phải là lý tưởng cho hệ thống S1070 do thiếu 2 giao diện PCIe Gen.

Những nút máy chủ cụm Lincoln là những máy chủ Dell PowerEdge 1950 III, mỗi máy chủ có chứa bộ xử lí hai nhân quad-core Intel Xeon 2,33 GHz với 12 MB (2x6MB) L2 cache, và bộ nhớ 16 GB (4x4GB) DDR2-667 cho mỗi nút máy chủ.

Hình 2. 8. Hai node của cụm Lincoln chia sẻ đơn với Tesla S1070

Hai bộ vi xử lý được hỗ trợ bởi hệ thống chip Greencreek (5400), hệ thống cung cấp side bus 1333 MHz độc lập (FSB). Máy chủ có 2 khe cắm PCIe Gen 2 8x: một khe cắm được sử dụng để kết nối 2 GPU với hệ thống tính toán Tesla S1070, khe cắm khác được sử dụng cho một thiết bị InfiniBand SDR.

Bảng 2. 1. Bảng so sánh giữa hai cụm GPU của AC và Lincoln

Công suất tiêu thụ trên AC

Trong bảng 2.1 cung cấp những thông tin về năng lượng tiêu thụ được thực hiện trên một nút duy nhất của cụm AC. Các phép đo được thực hiện trong quá trình sử dụng khác nhau, từ lúc khởi động cho tới ứng dụng điều hành. Khi hệ thống được bật lên và tất cả các phần mềm được tải, khả năng tiêu thụ điện năng Tesla của S1070 là khoảng 178w. Tuy nhiên, sau lần đầu tiên sử dụng GPU, mức tiêu thụ điện của nó tăng gấp đôi và không bao giờ đạt dưới 365w.

Để đánh giá mức tiêu thụ điện năng GPU tương quan với khối lượng công việc khác nhau, thử nghiệm đã thực hiện trên hai bài kiểm tra khác nhau: Kiểm tra đo điện năng tiêu thụ cho một hạt nhân truy cập bộ nhớ chuyên sâu và kiểm tra cho một bài toán có dấu phảy động. Đối với các kiểm tra bộ nhớ sâu, hệ thống sử dụng một tiện ích kiểm tra bộ nhớ. Thử nghiệm này liên tục đọc và viết các vị trí bộ nhớ GPU với việc

kiểm tra mẫu bit nhằm tìm ra những lỗi bộ nhớ chưa được sửa chữa. Đối với việc kiểm tra bộ nhớ này, sự tiêu thụ điện năng tối đa của các GPU Tesla là 745w.

Hình 2. 9. Đo băng thông giữa hệ thống Lincoln và AC

Băng thông lý thuyết hai chiều giữa các GPU và các máy chủ trên cả hai loại Lincoln và AC là 4 GB/s. Hình 2.9 cho thấy băng thông có thể đạt được khi đo trên các nút Lincoln và AC. Các phép đo được thực hiện bằng việc gửi dữ liệu giữa các máy chủ và những dữ liệu thiết bị sử dụng gọi các hàm API của CudaMemcpy và kích thước gói tin chạy từ 1 GB tới 1 byte. Đối với Lincoln, băng thông bền vững là 1,5 GB/s. Đối với AC, băng thông đạt được hoặc là 2,6 GB/s hoặc là 3,2 GB/s, tùy thuộc vào các giao diện PCIe tới các lõi CPU: khi dữ liệu được gửi từ bộ nhớ tới CPU với giao diện PCIe, có thể đạt được băng thông cao hơn.

Tiêu chí chuẩn HPL cho AC và Lincoln

Hiệu suất đỉnh kết hợp AC của nút CPU-GPU đơn nhất là 349,4 GFLOPS. Hiệu suất node cao điểm của Lincoln là 247,4 GFLOPS (cả hai con số được đưa ra cho độ chính xác gấp đôi).

Đối với một node đơn nhất của AC đã đạt được 117,8 GFLOPS (33,8% của max) và đối với một node đơn nhất của Lincoln đạt được 105 GFLOPS (42,5% max). Hiệu quả này tiếp tục giảm khoảng 30% khi sử dụng nhiều node. Những phép đo cho các cụm GPU khác rơi vào khoảng 70-80% hiệu suất node lớn nhất. Kết quả đối với các cụm này không có gì đáng ngạc nhiên, bới vì các node máy chủ được sử dụng trong cả AC và Lincoln không phải là lý tưởng cho hệ thống S1070 Tesla.

Tập hợp các cụm AC 16-node đạt được 1,7 TFLOPS và tập hợp con các cụm Lincoln với 32-node đạt được 2.3 TFLOPS trên điểm chuẩn HPL.

2.3.1. Phần cứng

Công nghệ CUDA cho phép giảm tải CPU và gửi các tính toán cho GPU bằng cách xây dựng kiến trúc song song, việc xử lý lượng lớn dữ liệu mảng bằng cách sử dụng một tập dòng lệnh giống hệt nhau (được gọi là nhân) cho từng phần tử trong mảng dữ liệu. Bằng cách này, bộ vi xử lý chỉ bận rộn với việc cung cấp các dữ liệu và hạt nhân cho GPU và sau đó thu thập kết quả. Mặc dù việc chuyển giao giữa CPU (máy chủ) và GPU (thiết bị) có thể xuất hiện như là một nút cổ chai do làm chậm tốc độ của bus. Một cách có thể đạt được kết quả rất tốt nếu nó làm cho song song dữ liệu nhiều nhất có thể trong thuật toán và cũng sẽ ánh xạ có thể tới phần cứng hiệu quả nhất có thể theo cách mà các giao dịch chuyển dữ liệu được giảm thiểu.

Mong muốn có sức mạnh tính toán nhiều hơn dẫn đến ý tưởng đưa công nghệ CUDA vào môi trường giao diện truyền thông điệp (MPI), do đó phát sinh khái niệm về cluser của GPU. Bên trong cluster mỗi nút của mạng MPI sẽ truyền hầu hết các nhiệm vụ song song tới các GPU, giảm tải để CPU chỉ để xử lý các thông tin liên lạc giữa các nút mạng.

Hình 2. 10. Các nút trong mô hình GPU Cluster

Ba thành phần chính được sử dụng trong một cụm GPU là các nút chủ, GPU, và kết nối sẽ thực hiện một phần đáng kể các tính toán, bộ nhớ lưu trữ, bus PCIe, và mạng lưới kết nối cần phải được phù hợp với hiệu suất GPU để duy trì một hệ thống cân bằng tốt. InfiniBand QDR kết nối để phù hợp với băng thông GPU tới máy chủ. Bộ nhớ lưu trữ cũng cần phù hợp với số lượng bộ nhớ trên GPU để sử dụng tất cả bộ nhớ của chúng.

2.3.2. Phần mềm

Giao diện truyền thông điệp được sử dụng để chuyển dữ liệu và thông tin giữa các nút và tại mỗi nút được sử dụng để giao tiếp giữa CPU và GPU và để ra lệnh bộ xử lý đồ họa thực hiện tính toán. Để thực hiện điều này mã MPI và CUDA cần được phát triển, biên dịch và triển khai trên cluster.

MPICH2 sử dụng một kịch bản gọi là mpicc cho biên dịch mã C. Ở một mức độ kịch bản này không làm gì nhiều hơn việc gọi trình biên dịch gcc với một vài thông số bao gồm header mpich và liên kết các thư viện mpich. Do đó biên dịch một mã

InfiniBand/ Gigabit Ethernet

GPU PCIe CPU GPU PCIe CPU

MPI/C có thể được thực hiện bằng cách chỉ sử dụng trình biên dịch gcc với các thông số thích hợp.

Trình biên dịch nvcc sẽ phân chia mã C / C + + (bao gồm cả MPI) và sẽ truyền nó tới trình biên dịch gcc cùng với các thông số nvcc, trong một biên dịch MPICH, trong giai đoạn sẽ được liên kết đến mã CUDA. Một mẫu Makfile được sử dụng để biên dịch mã hỗn hợp MPICH CUDA như hình sau:

CC= nvcc

CFLAGS = -I. -I/usr / local /mpich2 -1.0.6. p1/ include \ -I/ usr/ local / cuda / include \

-I/ home / noaje_gab / NVIDIA_CUDA_SDK / common /inc LDFLAGS =-L/usr / local /mpich2 -1.0.6. p1/lib \

-L/ usr/ local / cuda /lib \

-L/ home / noaje_gab / NVIDIA_CUDA_SDK /lib \

-L/ home / noaje_gab / NVIDIA_CUDA_SDK / common /lib LIB= - lcuda -lcudart -lm -lmpich -lpthread -lrt

MPICH_FLAG = - DMPICH_IGNORE_CXX_SEEK \ - DMPICH_SKIP_MPICXX

SOURCES = CalcCirc .cpp Init .cu main .cpp EXECNAME = MatrixProduct

all:

$(CC) -v -o $( EXECNAME ) $( SOURCES ) $(LIB) \ $( LDFLAGS ) $( CFLAGS ) $( MPICH_FLAG )

clean :

rm -f *.o core

Một phần của tài liệu Nghiên cứu kiến trúc hệ thống tính toán hiệu năng cao đa dụng dựa trên card đồ họa (Trang 46 - 55)

Tải bản đầy đủ (PDF)

(77 trang)