3 điểm bởi GN⁺ 2023-11-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Phát triển AI không còn đủ nếu chỉ dựa vào thực thi tuần tự kiểu CPU; muốn xử lý tốt hiệu năng huấn luyện và suy luận thì cần hiểu mô hình xử lý song song quy mô lớn của GPU
  • CPU thông thường ở phân khúc tiêu dùng có khoảng 2~16 lõi, mạnh ở tác vụ đơn luồng và phân nhánh điều kiện, trong khi GPU có hàng nghìn lõi nhỏ, phù hợp cho phép toán ma trận, xử lý ảnh và deep learning
  • AWS cung cấp các môi trường chạy GPU như P3/P4, P5/Inf1, G4 và Amazon SageMaker; p3.2xlarge có giá $3.06/giờ, p5.48xlarge là $98.32, còn g4dn.xlarge ở mức $0.526
  • CUDA của NVIDIA cho phép lập trình viên trực tiếp xử lý luồng thực thi song song từ cấp phát bộ nhớ GPU, sao chép dữ liệu, chạy kernel đến biên dịch
  • Các ví dụ cộng mảng, tạo Mandelbrot và CNN phân loại mèo/chó cho thấy cách chia vòng lặp tuần tự thành các luồng GPU; Mandelbrot giảm từ 4.07 giây trên CPU xuống 0.0046 giây trên GPU

Vì sao chỉ biết CPU là chưa đủ

  • Nhiều lập trình viên đã quen học tập và giải quyết vấn đề theo cách tiếp cận lấy CPU làm trung tâm, nhưng CPU về bản chất vận hành dựa trên kiến trúc tuần tự
  • CPU truyền thống thực thi lệnh theo tuyến tính và tối ưu một số ít lõi mạnh cho hiệu năng đơn luồng
  • Khi phải xử lý nhiều tác vụ cùng lúc, chi phí xử lý lần lượt từng việc theo cách thực thi tuần tự sẽ tăng lên đáng kể
  • Có thể cải thiện hiệu năng bằng multithreading, nhưng triết lý thiết kế cốt lõi của CPU vẫn gần với thực thi tuần tự

Mô hình AI và xử lý song song

  • Các kiến trúc AI hiện đại như Transformer tận dụng xử lý song song để tăng hiệu năng huấn luyện
  • RNN hoạt động theo tuần tự, nhưng Transformer như GPT có thể xử lý nhiều từ cùng lúc, từ đó nâng hiệu quả huấn luyện và năng lực mô hình
  • Huấn luyện song song cho phép xây dựng mô hình lớn hơn, và mô hình lớn hơn tạo nền tảng để cho ra đầu ra tốt hơn
  • Tính song song không chỉ áp dụng cho xử lý ngôn ngữ tự nhiên mà còn cho nhận dạng hình ảnh
    • AlexNet là ví dụ về việc xử lý đồng thời nhiều phần của ảnh để nhận diện mẫu
  • CPU, do được thiết kế xoay quanh hiệu năng đơn luồng, khó phân phối và thực thi hiệu quả khối lượng tính toán song song lớn mà các mô hình AI phức tạp đòi hỏi

Cách GPU giảm nút thắt cổ chai

  • GPU được thiết kế với cấu trúc dùng nhiều lõi nhỏ chuyên dụng thay vì các lõi lớn và mạnh như CPU
  • Tính song song của GPU đặc biệt phát huy ở các workload phải lặp lại số lượng lớn cùng một loại phép toán, như render đồ họa hay tính toán toán học phức tạp
  • Các framework deep learning như TensorFlow được tối ưu để tận dụng hiệu năng GPU nhằm tăng tốc huấn luyện và suy luận mô hình
  • Huấn luyện mạng nơ-ron bao gồm rất nhiều phép toán ma trận, và GPU mạnh ở việc song song hóa các phép toán này nhờ số lượng lõi lớn

Sự khác biệt vai trò giữa CPU và GPU

  • CPU

    • CPU được thiết kế tập trung vào xử lý tuần tự, nên mạnh ở các tác vụ thực thi tuyến tính theo một luồng lệnh
    • Phù hợp với tính toán mục đích chung, tác vụ hệ thống và xử lý thuật toán phức tạp có nhiều nhánh điều kiện
    • CPU tiêu dùng thường chỉ có số lõi tương đối ít, trong khoảng 2~16 lõi
    • Mỗi lõi có thể xử lý độc lập tập lệnh riêng của mình
  • GPU

    • GPU được thiết kế theo kiến trúc song song, rất hiệu quả trong việc xử lý đồng thời nhiều tác vụ con
    • Phù hợp cho render đồ họa, tính toán toán học phức tạp và thực thi các thuật toán có thể song song hóa
    • Công việc được chia thành các đơn vị song song nhỏ hơn để nhiều phép toán có thể diễn ra cùng lúc
    • Số lõi GPU thường lên tới hàng nghìn, được tổ chức thành streaming multiprocessors (SMs) hoặc cấu trúc tương tự
    • Phù hợp cho các tác vụ xử lý đồng thời lượng lớn dữ liệu như ảnh/video, deep learning và mô phỏng khoa học

Các môi trường GPU có thể chọn trên AWS

  • AWS cung cấp nhiều instance GPU để dùng cho các tác vụ như machine learning
  • Instance GPU đa dụng

    • P3P4 là các instance GPU đa dụng, phù hợp với nhiều loại workload khác nhau
    • Có thể dùng cho huấn luyện/suy luận machine learning, xử lý ảnh và mã hóa video
    • p3.2xlarge có giá $3.06/giờ và cung cấp 1 GPU NVIDIA Tesla V100 với 16GB bộ nhớ GPU
  • Instance tối ưu cho suy luận

    • Suy luận là quá trình đưa dữ liệu thời gian thực vào mô hình AI đã được huấn luyện để dự đoán hoặc giải quyết tác vụ
    • P5Inf1 được tối ưu cho suy luận machine learning, nơi độ trễ thấp và hiệu quả chi phí là quan trọng
    • p5.48xlarge có giá $98.32/giờ và cung cấp 8 GPU NVIDIA H100, mỗi GPU có 80GB bộ nhớ, tổng cộng 640GB video memory
  • Instance tối ưu cho đồ họa

    • G4 instances được thiết kế để xử lý các tác vụ nặng về đồ họa
    • Nhà phát triển game có thể dùng G4 instances để render đồ họa 3D cho trò chơi
    • g4dn.xlarge có giá $0.526/giờ và dùng 1 GPU NVIDIA T4 với 16GB bộ nhớ
  • Dịch vụ machine learning được quản lý

    • Amazon SageMaker là dịch vụ quản lý dành cho machine learning, cung cấp quyền truy cập tới các instance GPU như P3, P4 và P5
    • SageMaker phù hợp với các tổ chức muốn bắt đầu với machine learning mà không phải tự quản lý hạ tầng nền tảng
    • Có tài liệu riêng về giá Amazon SageMaker

Sử dụng cơ bản NVIDIA CUDA

  • CUDA là nền tảng tính toán song song và mô hình lập trình do NVIDIA phát triển, cho phép tăng tốc ứng dụng bằng cách tận dụng GPU accelerator
  • Ví dụ minh họa luồng phát triển CUDA gồm cấp phát bộ nhớ GPU, sao chép dữ liệu, chạy kernel và lấy kết quả về
  • Quy trình cài đặt

    • Tải base installer và driver installer từ CUDA
    • Thêm các biến môi trường sau vào .bashrc trong thư mục home
      • export PATH="/usr/local/cuda-12.3/bin:$PATH"
      • export LD_LIBRARY_PATH="/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH"
    • Chạy các lệnh sau
      • sudo apt-get install cuda-toolkit
      • sudo apt-get install nvidia-gds
    • Khởi động lại hệ thống để áp dụng các thay đổi
  • Các lệnh kiểm tra hữu ích

    • lspci | grep VGA: nhận diện và liệt kê GPU trong hệ thống
    • nvidia-smi: cung cấp thông tin chi tiết như mức sử dụng, nhiệt độ và lượng bộ nhớ dùng của GPU NVIDIA
    • sudo lshw -C display: cung cấp thông tin về bộ điều khiển hiển thị như card đồ họa
    • inxi -G: hiển thị thông tin về subsystem đồ họa bao gồm GPU và màn hình
    • sudo hwinfo --gfxcard: dùng để xem thông tin chi tiết về card đồ họa của hệ thống

Song song hóa phép cộng mảng bằng CUDA

  • Cộng mảng là một bài toán phù hợp để giải thích song song hóa bằng GPU
  • Các mảng ví dụ là A = [1,2,3,4,5,6], B = [7,8,9,10,11,12], và kết quả là C = [8,10,12,14,16,18]
  • Theo cách CPU, ta duyệt từng phần tử mảng và thực hiện phép cộng lần lượt
  • Khi dữ liệu tăng lên, thời gian của cách tuần tự cũng tăng, trong khi GPU có thể thực hiện đồng thời các phép tính như 1+7, 2+8, 3+9
  • Ví dụ CUDA dùng file kernel .cu
    • __global__ biểu thị hàm kernel được gọi trên GPU
    • vectorAdd nhận ba con trỏ số nguyên a, b, c và thực hiện phép cộng vector
    • threadIdx.x lấy chỉ số của luồng hiện tại
    • Mỗi luồng lưu tổng của phần tử tương ứng vào c[i]
  • Hàm main diễn ra theo thứ tự cấp phát bộ nhớ GPU, sao chép dữ liệu, chạy kernel rồi sao chép kết quả
    • cudaMalloc cấp phát bộ nhớ cudaA, cudaB, cudaC trên GPU
    • cudaMemcpy sao chép a, b từ host sang GPU
    • vectorAdd <<<1, sizeof(a) / sizeof(a[0])>>> dùng để chạy kernel
    • Vector kết quả cudaC được sao chép từ GPU về host
  • Việc biên dịch và chạy sử dụng lệnh nvcc
  • Có cung cấp toàn bộ mã nguồn

Tận dụng GPU trong tạo ảnh bằng Python

  • Tạo tập Mandelbrot là công việc xây dựng các mẫu thị giác phức tạp dựa trên hành vi của các con số trong một phương trình nhất định, và đây là tác vụ ngốn tài nguyên
  • Ví dụ Python chạy trên CPU duyệt qua từng pixel để tính giá trị Mandelbrot, và mất 4.07 giây để tạo ảnh 1024×1536
  • Phiên bản tăng tốc bằng GPU sử dụng Numba library
    • Decorator @jit thực hiện biên dịch Just-In-Time để chuyển mã Python thành mã máy
    • cuda.jit được dùng để tạo mandel_gpu, với device=True để chạy trên GPU
    • mandel_kernel chạy trên CUDA GPU và phân chia tác vụ tạo Mandelbrot cho các luồng GPU
  • create_fractal_gpu thực hiện cấp phát bộ nhớ GPU, thiết lập luồng và block, chạy GPU kernel, đồng bộ hóa và sao chép kết quả
    • Sử dụng threadsperblock = (16, 16)
    • cuda.synchronize() đợi GPU hoàn tất công việc
    • d_image.copy_to_host(image) sao chép kết quả về phía CPU
  • Thời gian chạy trên GPU là 0.0046 giây, nhanh hơn rất nhiều so với mã chạy trên CPU
  • Có cung cấp toàn bộ mã nguồn

Huấn luyện mạng nơ-ron phân loại mèo/chó bằng GPU

  • Để cho thấy GPU được dùng trong AI như thế nào, ví dụ mạng nơ-ron phân biệt mèo và chó được sử dụng
  • Các phần cần chuẩn bị trước là CUDA và TensorFlow
    • TensorFlow có thể được cài bằng pip install tensorflow[and-cuda]
    • Dataset sử dụng Kaggle Dogs vs. Cats
    • Sau khi tải về, sắp xếp ảnh mèo và chó vào các thư mục con khác nhau trong thư mục huấn luyện
  • Mô hình sử dụng mạng nơ-ron tích chập (CNN)
    • pandas và numpy được dùng để thao tác dữ liệu
    • Sequential được dùng để xếp chồng tuyến tính các layer của mạng nơ-ron
    • Convolution2D, MaxPooling2D, Dense, Flatten là các layer cấu thành CNN
    • ImageDataGenerator được dùng để tăng cường dữ liệu theo thời gian thực trong lúc huấn luyện
  • Dữ liệu huấn luyện được nạp bằng ImageDataGenerator
    • Với dữ liệu huấn luyện, áp dụng rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
    • Ảnh đầu vào được đặt kích thước (64, 64), batch size 32 và chế độ phân loại nhị phân
  • Cấu trúc CNN gồm các layer tích chập, max pooling, flatten, Dense và đầu ra sigmoid
  • Mô hình được biên dịch với optimizer adam, loss binary_crossentropy và metric accuracy
  • Quá trình huấn luyện chạy với epochs=25, validation_steps=2000, sau đó lưu vào file .h5 bằng classifier.save('trained_model.h5')
  • Mã suy luận nạp trained_model.h5, chuyển ảnh về kích thước (64, 64), rồi nếu giá trị dự đoán từ 0.5 trở lên thì in ra dog, ngược lại là cat
  • Có cung cấp toàn bộ mã nguồn

Phạm vi ứng dụng của GPU

  • Trong kỷ nguyên AI, rất khó bỏ qua năng lực của GPU, và lập trình viên cần hiểu rõ hơn về khả năng của nó
  • Khi chuyển từ các thuật toán tuần tự sang thuật toán song song, GPU trở thành công cụ để tăng tốc các phép tính phức tạp
  • Khả năng xử lý song song của GPU đặc biệt có lợi cho việc xử lý các dataset lớn và kiến trúc mạng nơ-ron phức tạp trong AI và machine learning
  • GPU không chỉ được dùng trong machine learning truyền thống mà còn cả trong nghiên cứu khoa học, mô phỏng và các tác vụ ngốn dữ liệu
  • Năng lực xử lý song song này được ứng dụng để giải quyết vấn đề trong nhiều lĩnh vực như khám phá thuốc, mô hình hóa khí hậu và mô phỏng tài chính

1 bình luận

 
GN⁺ 2023-11-13
Ý kiến trên Hacker News
  • Mã trong bài này sai. CUDA kernel hoàn toàn không được gọi: https://github.com/RijulTP/GPUToolkit/blob/f17fec12e008d0d37...
    90% thời gian “tính toán” tập Mandelbrot bằng mã JIT compile không dùng cho tính toán thực sự, mà dùng để compile hàm
    Nếu muốn học CUDA cho đúng, triển khai phép nhân ma trận là một bài tập tốt; các tutorial đáng tham khảo là https://cnugteren.github.io/tutorial/pages/page1.htmlhttps://siboehm.com/articles/22/CUDA-MMM

    • Trong CUDA cũng có SAXPY, được gọi là “Hello World” của mã toán học song song. SAXPY là viết tắt của “Single-Precision A·X Plus Y”, là một hàm BLAS chuẩn và là một phép toán rất đơn giản kết hợp nhân vô hướng với cộng vector
      Nó nhận hai vector dấu phẩy động 32-bit X và Y cùng một vô hướng A, nhân mỗi X[i] với A rồi cộng vào Y[i]: https://developer.nvidia.com/blog/six-ways-saxpy/
    • Sau khi được chỉ ra, tác giả đã sửa mã và cập nhật cả blog
  • Bài viết tuy khẳng định “mọi developer đều nên biết”, nhưng thực tế gần với một bài nói về cách GPU được dùng trong AI hơn. Phần lớn developer không phải là developer AI, cũng không trực tiếp tương tác với AI hay trực tiếp dùng GPU
    Hơn nữa, bài gần như không đề cập đến đồ họa 3D, lý do cốt lõi khiến GPU ra đời

    • Biết nền tảng của các lĩnh vực lân cận là điều hữu ích. Đặc biệt nếu đó là lĩnh vực được áp dụng rộng như machine learning; biết đâu dự án bạn phụ trách tháng tới sẽ cần dùng machine learning, và điều đó cũng có lợi khi cộng tác với đồng nghiệp phụ trách phần đó
      Có kiến thức cơ bản cũng giúp bạn hiểu rõ hơn những câu chuyện “AI” được bán cho quản lý
      Thái độ “không cần biết lĩnh vực lân cận” là điều tôi thường thấy ở trường. Ở mảng quản trị hệ thống, các bạn cùng khóa nói không cần biết lập trình, nhưng rồi vẫn cần scripting; ở trường phát triển phần mềm, người ta nói không cần biết mạng, nhưng vài năm sau DevOps xuất hiện rộng rãi trong các tin tuyển dụng
      Nếu bài viết dài khoảng 1.500 từ thì đọc kỹ như học cũng chỉ mất chừng 12 phút; kể cả chạy thử các ví dụ mã và tốn khoảng 2 giờ thì cũng không phải khoản đầu tư lớn. Tất nhiên với điều kiện bài đó là một tài liệu nhập môn tốt
    • Khi tôi chuyển từ một công ty embedded truyền thống sang startup, tôi nhớ một đồng nghiệp đã thân thiện trêu rằng tôi không biết cách gửi JSON request bằng curl. Tôi vẫn là developer embedded, nhưng sau đó đã học nhiều về backend, frontend và hạ tầng; trong vài năm tới, có vẻ khả năng cao toàn ngành cũng sẽ có tình huống tương tự với AI
    • Ngay cả ví dụ render tập Mandelbrot cũng chỉ đạt tăng tốc 10 lần, trong khi đây là ví dụ điển hình của phép tính gần như hoàn toàn bị ràng buộc bởi lượng phép toán dấu phẩy động. Cá nhân tôi thấy đây là một bài viết tệ
    • Có nhiều giả định không chính xác. Tôi đồng ý rằng phần lớn developer không phải là developer AI, và tác giả bài gốc có vẻ hơi tách rời khỏi nhóm developer nói chung, hoặc đang lấy thế giới quanh mình làm chuẩn để suy ra toàn bộ
    • Mỗi khi thấy một bài khẳng định “mọi developer đều nên biết”, tuyên bố đó hầu như đều sai. Có thể vẫn có những bài chứa thông tin mà thật sự ai cũng nên biết, nhưng phần lớn những gì tôi gặp là clickbait
  • Tôi cho rằng lý do Python thống trị trong AI là vì quan hệ Python-C giống với quan hệ CPU-GPU
    GPU có hiệu năng rất tốt nhưng khó lập trình trực tiếp, nên mọi người điều khiển GPU thông qua các lệnh gọi API cấp cao như PyTorch
    C cũng có hiệu năng tốt nhưng khó lập trình, nên Python được dùng như một lớp trừu tượng bên trên C
    Không rõ mọi người có cần hiểu GPU sâu đến vậy không. Điều này càng đúng nếu bạn không đi sâu vào huấn luyện hay vận hành AI; và nếu định luật Moore kết thúc, còn multithreading trở thành cách chính để tăng tốc, thì có khả năng sẽ xuất hiện các ngôn ngữ mới phù hợp với paradigm lập trình song song. Mojo trông giống như điểm khởi đầu cho hướng đó

    • Tôi từng tự hỏi liệu có chỗ cho một ngôn ngữ mới có thể âm thầm tối đa hóa hiệu năng bất kể chạy trên phần cứng nào hay không
      Từ các phép tính lặp đơn giản, mọi lệnh đều được thiết kế để phía sau tự động tận dụng song song tất cả core CPU một cách thông minh, và chuyển những việc có thể sang GPU
      Tôi tò mò liệu đã từng có nỗ lực như vậy chưa, hoặc ngay từ đầu điều đó có khả thi không
    • Khó có thể nói định luật Moore đã kết thúc, và multithreading cũng không phải là câu trả lời. Tuy nhiên câu đầu tiên thì đúng
    • Lập trình GPU không khó đến vậy. CUDA khá trực quan với nhiều tác vụ, và trong nhiều trường hợp có thể đạt mức tăng tốc 100 lần với chưa đến 100 dòng mã
    • Nếu dùng một ngôn ngữ hiện đại hơn, có thể khá dễ dàng giữ được khả năng biểu đạt kiểu Python mà vẫn đạt hiệu năng cấp C. Tôi thậm chí nghĩ chính việc C thiếu trừu tượng khiến mã chậm nhưng đơn giản trông hấp dẫn hơn
    • C là một lối sống. Những người gần như chỉ dùng C thường khó chấp nhận khái niệm “khoảng trắng có ý nghĩa” của Python
  • Cách giải thích “khi CPU gặp nhiều tác vụ, nó phân bổ tài nguyên để xử lý từng tác vụ một” quá đơn giản. Thậm chí tôi còn ước CPU vẫn đơn giản đến mức đó
    Việc bài viết tập trung vào mô hình lập trình là hợp lý, nhưng xét từ góc độ hiệu năng, nói “CPU thực thi lệnh tuần tự” về cơ bản là sai. Pipeline thực thi lệnh song song, cũng có SIMD, và nhiều core cũng có thể cùng xử lý một vấn đề

    • Có vẻ bài này đặt trọng tâm sai. CPU có AVX-512 cũng có khả năng song song dữ liệu quy mô lớn, và CPU cũng có thể thực thi nhiều lệnh cùng lúc
      Khác biệt lớn là CPU dùng nhiều silicon và điện năng cho xử lý luồng điều khiển để chạy hiệu quả một thread, trong khi GPU dùng các tài nguyên đó cho nhiều đơn vị tính toán hơn và chạy rất nhiều thread để che giấu độ trễ của luồng điều khiển và bộ nhớ
    • CPU cũng thực thi đồng thời nhiều lệnh SIMD
  • Nói CPU phù hợp với mã tuần tự còn GPU phù hợp với mã song song thì đúng ở một mức nào đó, nhưng là một phép xấp xỉ khá thô. Nếu giả định ngân sách điện năng tương tự nhau ở mức vài trăm watt, CPU có khoảng 100 “lõi” thực thi từng tác vụ độc lập một, tính cả hyper-thread, và che giấu độ trễ bộ nhớ bằng dự đoán rẽ nhánh và pipelining
    GPU có khoảng 100 “đơn vị tính toán”, mỗi đơn vị chạy xen kẽ khoảng 80 tác vụ độc lập và che giấu độ trễ bộ nhớ bằng cách thực thi lệnh tiếp theo của tác vụ khác
    Thuật ngữ khá rối rắm; CPU nhiều khả năng có đơn vị vector rộng 256-bit, còn GPU có đơn vị vector rộng 2048-bit, nhưng nhìn từ xa một chút thì hai kiến trúc trông khá giống nhau

    • GPU có băng thông bộ nhớ lớn hơn CPU khoảng 10 lần, và với LLM thì khác biệt này trở nên quan trọng. Nếu xử lý theo batch tối ưu, để tạo ra một token đầu ra về cơ bản phải đọc toàn bộ bộ nhớ, vì bộ nhớ đó được dùng cho trọng số hoặc KV cache
    • Tôi luôn thấy lạ là không có nhiều động thái kết hợp một vài lõi độ trễ thấp với nhiều lõi thông lượng cao. Chẳng hạn đặt một lõi Intel P ở giữa nhiều lõi E, rồi gắn thêm nhiều lõi iGPU hoặc đơn vị AVX-512 vào các lõi E đó
      Có thể gọi nó là Xeon Chi
  • Trong khi hầu hết ngôn ngữ lập trình được thiết kế cho xử lý tuần tự như CPU, Erlang/Elixir được thiết kế cho tính song song như GPU, nên tôi tò mò liệu Nx / Axon có nổi lên không: https://github.com/elixir-nx/

    • Erlang được thiết kế không phải cho xử lý song song nặng về tính toán, mà cho hệ thống phân tán có mức đồng thời cao
    • Tôi thật sự tò mò Elixir và Nx sẽ hoạt động tốt đến đâu trong các tác vụ nặng tính toán trên cụm HPC. Về cấu trúc, nó không khác nhiều so với MPI vốn hay được dùng trong lĩnh vực này, và có thể dễ tiếp cận hơn nhiều như numpy và hệ sinh thái Python khoa học
    • Tôi đang xem liệu tổ hợp Elixir và Nx/Axon có phù hợp với các kiến trúc pha trộn CPU và GPU như NVIDIA Grace Hopper không
    • Tôi tò mò liệu nó có chạy trên GPU không. Tôi nghĩ tương lai sẽ cần cả hai. Lập trình tuần tự vẫn là trừu tượng tốt nhất cho phần lớn công việc không cần mức thực thi song song khổng lồ
  • Cần có hướng dẫn mua sắm. Tôi muốn biết tối thiểu phải chi bao nhiêu và lựa chọn tốt nhất theo từng mức ngân sách là gì. Vấn đề là thông tin đó thỉnh thoảng thay đổi, và tôi không biết có tài liệu nào được duy trì cập nhật liên tục không

  • Lại quay về kiểu bài câu click “mọi lập trình viên cần biết” rồi à

    • Những bài theo kiểu đó có vẻ sẽ bị ChatGPT thay thế, nhưng nếu viết tốt thì thực sự vẫn khá có giá trị
      Tôi thích những bài đối diện trực tiếp với độ phức tạp, và vì có phần nào hiểu cả phương pháp định lượng lẫn các chi tiết định tính trong những lĩnh vực như phần cứng máy tính, nên tôi thấy đáng mừng khi có bài giải thích kỹ chi tiết của một lĩnh vực
      Ví dụ, việc “What every programmer should know about memory” có phải là thứ mọi lập trình viên đều cần biết hay không là chuyện khác, nhưng một lập trình viên giỏi nên có cảm giác về cách máy tính thực sự vận hành. Ý chính rút ra từ bài đó là tính cục bộ thường tự nhiên xuất hiện trong mã tốt: nhanh, dễ theo dõi và phù hợp với vấn đề
    • Có vẻ vậy. Nên đọc có chọn lọc các luận điểm của bài này
  • Bài viết hay, nhưng AWS P5 instance, cùng với P4d và P4de, rõ ràng được nhắm nhiều hơn cho huấn luyện chứ không phải suy luận. Các loại instance phù hợp hơn cho suy luận lần lượt là G4dnG5, dùng GPU T4 và A10G

    • Bài gốc bỏ sót G5
  • Tôi gần như mới bắt đầu với lập trình GPU, nhưng đọc bài này thấy thú vị. Thật ngạc nhiên là mọi thứ đã phát triển đến mức có thể huấn luyện một mạng nơ-ron “chó hay mèo” đơn giản dễ dàng như vậy