- Google TPU v1 là một ASIC được phát triển trong 15 tháng kể từ cuối năm 2013, nhằm xử lý chi phí và quy mô suy luận của các dịch vụ học sâu, với mục tiêu đạt hiệu năng trên chi phí cao gấp 10 lần so với GPU
- Điểm cốt lõi là triển khai mảng systolic của H.T. Kung và Charles E. Leiserson từ năm 1978 dưới dạng cấu trúc MAC 256×256, qua đó giảm việc phải đưa kết quả trung gian của phép nhân ma trận qua lại bộ nhớ
- TPU v1 giao tiếp với host qua PCIe, lưu trọng số trong DDR3-2133, và tổ chức luồng suy luận bằng một số ít lệnh như
Read_Host_Memory, Read_Weights, Matrix_Multiply / Convolve, Activate, Write_Host_Memory
- Nhờ phép nhân số nguyên 8-bit×8-bit và lượng tử hóa, TPU tránh được gánh nặng diện tích die của tính toán dấu phẩy động; User Space Driver và Kernel Driver tích hợp với TensorFlow điều khiển việc thực thi
- Intel Haswell CPU và Nvidia K80 GPU là các đối tượng so sánh khi đó; trong suy luận, TPU v1 nhanh hơn khoảng 15~30 lần và có hiệu năng/Watt gia tăng tương đối cao hơn 25~29 lần so với GPU, nhưng không phải là thiết bị dành cho huấn luyện
Điểm khởi đầu của TPU v1 nhằm giảm chi phí suy luận
- Mục tiêu của dự án TPU v1 là nhanh chóng tạo ra một ASIC dành cho suy luận để giảm chi phí phần cứng quy mô lớn mà các dịch vụ dựa trên học sâu yêu cầu
- Mục tiêu đặt ra là có hiệu năng trên chi phí cao gấp 10 lần GPU trong suy luận
- Dự án đồng thời đòi hỏi phát triển nhanh, hiệu năng cao, triển khai ở quy mô lớn, hỗ trợ tức thì cho các workload mới và hiệu quả chi phí
- Tên gọi TPU xuất phát từ việc đây là thiết bị tăng tốc các phép toán tensor
- Phép tính cốt lõi mà phần cứng TPU v1 thực sự xử lý chủ yếu là các phép toán vector và ma trận
- Các lớp ẩn và lớp đầu ra của mạng nơ-ron có thể được biểu diễn như kết quả của việc áp dụng hàm kích hoạt lên tích của vector đầu vào và ma trận trọng số
- Khi có nhiều dữ liệu đầu vào, dạng xử lý sẽ là áp dụng hàm kích hoạt lên từng phần tử của kết quả nhân ma trận
Xử lý nhân ma trận bằng mảng systolic
- TPU v1 sử dụng khái niệm hệ thống systolic trong bài báo năm 1978 của H.T. Kung và Charles E. Leiserson, Systolic Arrays (for VLSI)
- Đây là cấu trúc trong đó nhiều bộ xử lý tính toán và truyền dữ liệu theo một nhịp đều đặn
- Mỗi bộ xử lý thực hiện phép tính ngắn trong khi liên tục di chuyển dữ liệu vào và ra
- Với phép nhân ma trận 2×2 đơn giản, nếu đưa giá trị đầu vào từ phía trên và bên trái theo đúng thứ tự, kết quả sẽ tự nhiên xuất hiện từ mảng MAC 2×2
- Mỗi MAC thực hiện phép nhân và cộng dồn
- Tổng từng phần được lưu bên trong mảng, còn kết quả cuối cùng xuất hiện dưới dạng các đường chéo di chuyển
- Ví dụ 2×2 cần 4 bước, nhưng trên thực tế có thể bắt đầu phép nhân ma trận tiếp theo ngay khi MAC ở góc trên bên trái trống, nên có thể thực hiện một phép nhân ma trận mới sau mỗi 2 chu kỳ
- Điểm cốt lõi là nếu cấp dữ liệu vào mảng systolic theo đúng thứ tự, chính luồng di chuyển của giá trị và kết quả sẽ tạo ra thứ tự tính toán cần thiết
- Không cần lưu kết quả trung gian vào bộ nhớ chính rồi đọc lại
- Nhờ cấu trúc của đơn vị nhân ma trận và thứ tự đầu vào, kết quả trung gian tự động sẵn sàng đúng vào thời điểm cần dùng
Cấu hình hệ thống TPU v1
- TPU v1 giao tiếp với máy chủ host qua bus nối tiếp tốc độ cao PCIe và truy cập trực tiếp vào DDR3 DRAM riêng
- Các thành phần chính như sau
- DDR3 DRAM / Weight FIFO
- Trọng số được lưu trong các chip DDR3 RAM kết nối qua giao diện DDR3-2133
- Sau khi được tải sẵn từ bộ nhớ host qua PCIe, chúng được chuyển vào Weight FIFO để Matrix Multiply Unit sử dụng
- Matrix Multiply Unit
- Đây là một mảng systolic gồm 256×256 MAC
- Nó nhận 256 trọng số từ phía trên và 256 dữ liệu đầu vào từ bên trái
- Accumulators
- Lưu các kết quả đi ra từ phía dưới đơn vị ma trận systolic
- Activation
- Là bước áp dụng hàm kích hoạt của mạng nơ-ron
- Unified Buffer / Systolic Data Setup
- Lưu kết quả sau khi áp dụng hàm kích hoạt và chuẩn bị cấp lại làm đầu vào cho Matrix Multiply Unit để tính toán lớp tiếp theo
Định dạng tính toán và tập lệnh
- Matrix Multiply Unit của TPU v1 thực hiện phép nhân số nguyên 8-bit×8-bit
- Nó dùng lượng tử hóa để tránh tính toán dấu phẩy động vốn đòi hỏi diện tích die lớn hơn
- Tập lệnh là thiết kế CISC với khoảng 20 lệnh
- Lệnh không được lấy từ bộ nhớ, mà do máy chủ host gửi qua PCIe
- Phần lớn luồng suy luận được cấu thành từ 5 lệnh chính
Read_Host_Memory
- Đọc giá trị đầu vào từ bộ nhớ host qua PCIe vào Unified Buffer
Read_Weights
- Đọc trọng số từ bộ nhớ trọng số vào Weight FIFO
Matrix_Multiply / Convolve
- Gửi đầu vào trong Unified Buffer tới Accumulators, đồng thời thực hiện nhân ma trận hoặc tích chập
- Nhân đầu vào B×256 với đầu vào trọng số hằng 256×256 để tạo đầu ra B×256, mất B chu kỳ pipeline
Activate
- Áp dụng các hàm phi tuyến của nơ-ron nhân tạo như ReLU, Sigmoid lên đầu vào trong Accumulators và xuất kết quả ra Unified Buffer
Write_Host_Memory
- Ghi kết quả trong Unified Buffer vào bộ nhớ host qua PCIe
- Luồng này có thể được xem đại khái như sau
Read_Host_Memory
Read_Weights
Loop_Start
Matrix_Multiply
Activate
Loop_End
Write_Host_Memory
- Đơn vị ma trận dùng thực thi systolic để giảm số lần đọc/ghi Unified Buffer, qua đó tiết kiệm năng lượng
- Dữ liệu đi vào từ bên trái, còn trọng số được nạp từ phía trên
- Các phép toán MAC trên 256 phần tử đi xuyên qua ma trận như một mặt sóng chéo
TensorFlow và ngăn xếp driver
- Để sử dụng phần cứng TPU v1 trong dịch vụ thực tế, cần có ngăn xếp phần mềm hỗ trợ nó
- Vì Google phát triển và sử dụng TensorFlow, việc tạo driver để TensorFlow hoạt động với TPU v1 là một bước then chốt
- Ngăn xếp phần mềm TPU phải tương thích với các ngăn xếp dành cho CPU và GPU
- Ứng dụng phải có thể được chuyển sang TPU một cách nhanh chóng
- Phần ứng dụng chạy trên TPU thường được viết bằng TensorFlow và được biên dịch thành API có thể chạy trên GPU hoặc TPU
- Giống như GPU, ngăn xếp TPU cũng được chia thành User Space Driver và Kernel Driver
- Kernel Driver được giữ nhẹ, chỉ xử lý quản lý bộ nhớ và ngắt, với mục tiêu ổn định dài hạn
- User Space Driver thay đổi thường xuyên, phụ trách thiết lập và điều khiển việc thực thi TPU, định dạng lại dữ liệu theo thứ tự TPU, chuyển các lệnh gọi API thành lệnh TPU, và tạo binary ứng dụng
Tiến trình 28nm và bố trí die
- TPU v1 được sản xuất trên tiến trình 28nm tương đối trưởng thành của TSMC
- Các chip Intel Haswell CPU và Nvidia K80 GPU dùng trong trung tâm dữ liệu của Google khi đó được chế tạo trên tiến trình tiên tiến hơn
- Theo Google, diện tích die của TPU v1 nhỏ hơn một nửa diện tích die của các chip đó
- ISA đơn giản giúp giảm overhead die cần cho giải mã và các tác vụ liên quan
- Vùng
control chỉ chiếm 2% diện tích die
- Matrix Multiply Unit chiếm 24%, còn Unified Buffer chiếm 29%
So sánh hiệu năng và giới hạn rõ ràng
- TPU v1 là thiết bị dành cho suy luận, nhằm sử dụng các mô hình đã được huấn luyện một cách hiệu quả hơn trong các dịch vụ thực tế ở quy mô Google
- Nó không phải là thiết bị được thiết kế để cải thiện tốc độ hay hiệu quả huấn luyện
- Suy luận và huấn luyện tạo ra những bài toán khác nhau trong phát triển phần cứng chuyên dụng
- Tính đến năm 2013, các đối tượng so sánh chính là Intel Haswell CPU và Nvidia K80 GPU
- TPU v1 có số lượng MAC nhiều hơn K80 GPU 25 lần
- TPU v1 có bộ nhớ on-chip nhiều hơn K80 GPU 3,5 lần
- Trong suy luận, TPU v1 nhanh hơn K80 GPU và Haswell CPU khoảng 15~30 lần
- Hiệu năng/Watt gia tăng tương đối so với GPU là 25~29 lần
- Nhờ kiến trúc tùy chỉnh, TPU v1 đạt hiệu năng suy luận cao hơn và mức sử dụng năng lượng thấp hơn so với CPU và GPU thời điểm đó
- Vì là thiết kế thế hệ đầu tập trung vào một mục tiêu duy nhất là suy luận nhanh và tiết kiệm điện, nó vẫn có giới hạn là không được thiết kế cho huấn luyện
1 bình luận
Các ý kiến trên Hacker News
CEO của Groq, Jonathan Ross, gần đây trong một cuộc phỏng vấn podcast đã kể chuyện khi còn ở Google xây dựng TPU đời đầu: ban đầu đó là một FPGA ông làm trong 20% thời gian, sau khi ngồi gần một nhóm đang gặp vấn đề về tốc độ suy luận
Sau khi làm ra thứ chạy được, Jeff Dean đã tính toán và quyết định chuyển sang ASIC
Nếu là bây giờ, tôi nghĩ Google nên tách nhóm TPU thành một công ty riêng. Đây là đối thủ đáng tin cậy duy nhất có thể đối đầu với Nvidia, và mức hỗ trợ phần mềm cũng chỉ đứng sau Nvidia
https://open.spotify.com/episode/0V9kRgNS7Ds6zh3GjdXUAQ?si=q...
Nhưng từng điểm đều có điểm yếu. Sản lượng fab đang căng, nhưng Nvidia có thể hy sinh thị trường GPU tiêu dùng nếu bán được chip AI đắt hơn. Nếu một đối thủ đã đặt cược lớn từ vài năm trước, hoặc một công ty có nhiều năng lực sản xuất như Intel thay đổi ưu tiên, lợi thế này sẽ biến mất
Phần mềm độc quyền trở thành chuẩn ngành thì tiện, nhưng tầm quan trọng thực tế phụ thuộc rất nhiều vào ca sử dụng. Thiết kế phần cứng cho TPU về bản chất có vẻ đơn giản hơn GPU rất nhiều; không cần ray tracing, texture sampler hay rasterization, mà chủ yếu chỉ cần rất nhiều phép nhân ma trận và bộ nhớ
Quan hệ khách hàng hữu ích để luôn có mặt trong các cuộc trao đổi, nhưng trong một thị trường luôn tìm kiếm dù chỉ chút lợi thế, nhà cung cấp phần cứng có FLOPS trên mỗi đô la cao nhất sẽ có đủ khách hàng để lấp đầy năng lực sản xuất. Vì vậy tôi nghĩ vài năm nữa cạnh tranh sẽ trở thành hiện thực khá nhanh
Tuy nhiên TPU cũng là tài nguyên tính toán khá khan hiếm ngay trong nội bộ Google, và rất có thể họ còn khó đáp ứng nhu cầu nội bộ
Hiếm khi tôi nói mình tôn trọng một công ty đến mức này, nhưng tôi thật sự tôn trọng Groq
Google phát minh ra TPU, Google Research còn công bố cả bài báo về LLM, vậy mà tôi không hiểu vì sao NVDA và các startup AI lại lấy gần như 100% giá trị
Trong trường hợp Google, có thể ví rằng nếu đề xuất cung cấp rộng rãi thứ như ChatGPT, nó có thể ăn vào vị trí quảng cáo trả tiền trên công cụ tìm kiếm và doanh thu quảng cáo từ những trang mà người dùng sẽ không cần truy cập nữa. Vì vậy có thể họ đã quyết định chỉ triển khai thận trọng khi cạnh tranh buộc phải làm, theo cách ít gây chấn động hơn
Thực tế chắc không đơn giản như vậy, nhưng nếu đó là lý do thì khá buồn cười
https://www.linkedin.com/posts/eolver_googles-defense-agains...
Tôi là nhân viên Google, nếu đã lâu chưa xem TPU thì khuyên nên xem v5. Giờ nó hỗ trợ PyTorch/JAX nên dễ dùng hơn nhiều so với thời chỉ dành cho TensorFlow
Bài viết này đã kết nối rất tốt nhiều mảnh ghép trước đây còn rời rạc ở mức trừu tượng với việc chúng thực sự chảy bên trong silicon như thế nào
Tôi đặc biệt thích khi thấy các lệnh CISC đơn giản gần như tương ứng trực tiếp với các bước suy luận LLM
Có thể đây là câu hỏi ngớ ngẩn bộc lộ sự thiếu hiểu biết, nhưng ở phía người tiêu dùng, tôi liên tục nghe nói các chip M1~M4 tốt cho một số tác vụ AI
Hiện nay những thứ quan trọng nhất với tôi là các công cụ như Photoshop, Resolve, và tôi đã thấy chúng chạy nhanh hơn rất nhiều trên chip tự thiết kế mới của Apple so với máy cũ của mình
Điều này có thể không liên hệ tốt với những gì con chip này hay H100 có thể làm, nhưng tôi tò mò liệu có liên hệ ở mức nào đó không. Tất nhiên Apple không bán riêng chip tự thiết kế, nên để ứng dụng thực tế có lẽ họ phải ra một sản phẩm kiểu máy chủ ngoài chứa đầy GPU và chip AI
Các chip M* dùng bộ nhớ hợp nhất, và đặc biệt bản Pro/Max/Ultra có băng thông bộ nhớ rất cao ngay cả khi so với GPU như 1080. Băng thông bộ nhớ của M1 Ultra nằm khoảng giữa 2080 và 3090
Với batch size nhỏ, đặc biệt batch 1 như hầu hết tác vụ cục bộ, suy luận bị giới hạn bởi băng thông bộ nhớ hơn là năng lực tính toán. Vì vậy mới có nhận xét rằng chip M* tốt cho học máy
Nhưng H100 chủ yếu được dùng để huấn luyện với batch size khổng lồ, và để huấn luyện mô hình lớn cần rất nhiều kết nối liên thông. Ở quy mô đó cường độ số học rất cao, nên ngay cả nếu có thể nối mạng các chip M* lại, chúng cũng không cạnh tranh được nhiều. Có thể nói chúng chọn một điểm khác trên đường Pareto điện năng/hiệu quả so với các chip tiêu thụ nhiều điện như H100
Điều Google thực sự nên làm là bước vào lĩnh vực EUV 2nm và đi xuống dưới 2nm
Dù là quang khắc điện tử hay công nghệ mà ASML dùng để in lên chip, nếu họ có được những thứ như vậy thì sẽ trở thành một thế lực thực sự nguy hiểm. Có lẽ cần một dự án moonshot hardcore kiểu Google X
Hoặc biết đâu họ cũng có khoảng 500 triệu USD để mua một thiết bị. Nếu TPU thực sự tốt đến vậy, việc tích hợp dọc từ công nghệ riêng đến cả fab riêng có thể là một mảng kinh doanh tốt
Lý do các fab tiên tiến hiện tại có lãi là nhờ tạo ra các thiết bị điện toán đa dụng cho nhiều khách hàng và mục đích sử dụng khác nhau, cùng với nhân tài và kỹ thuật tích lũy qua nhiều thập kỷ. Hơn nữa, khách hàng còn độc lập thúc đẩy đổi mới ở các lĩnh vực cốt lõi, như cải thiện yield HDI chip-on-chip của Micron, hay fabric giao tiếp giữa die và thiết kế substrate đa chip của Xilinx
TPU tuyệt đối không thể tạo ra sản lượng cần thiết, cũng không thu hút được khách hàng để tạo nên quy mô kinh tế có lợi nhuận. Google còn phải đưa ra mức giá hấp dẫn so với đối thủ
Nếu có tính khả thi kinh doanh đủ thuyết phục, các fab hiện hữu sẽ sẵn sàng phân bổ sản lượng cho họ. TPU hiện vẫn hoàn toàn chưa thuyết phục đến mức đó
Tôi đã nghe một bài thuyết trình trong đó Jim Keller của TensTorrent giải thích một cách tiếp cận khác để tạo lõi AI. Cách đó dùng 5 lõi RISC-V: một lõi để nạp dữ liệu, một lõi để upload dữ liệu, các lõi còn lại chuyên cho phép toán ma trận
Ông ấy cũng nhắc đến Google TPU, nói rằng việc lập trình giống như xử lý VLIW và có khoảng 500 người làm compiler
Trong bài gốc có câu “TPU v1 là thiết kế CISC chỉ có khoảng 20 lệnh”, và tôi thấy buồn cười vì CISC/RISC dường như đã đi từ một quan sát sắc bén, thành chương trình nghiên cứu, công nghệ mang tính cách mạng, buzzword marketing, rồi cuối cùng thành thứ hoàn toàn vô nghĩa
Có lẽ nên gọi đó là vòng đời của một thuật ngữ
Vì vậy, dù TPU có ít lệnh, nếu mỗi lệnh khá phức tạp thì vẫn có thể là CISC. Tuy nhiên lần cuối tôi học kiến trúc máy tính là lớp cao học cách đây 15 năm nên ký ức cũng mơ hồ. Phần lớn học kỳ đó tôi còn dành cho công việc liên quan đến Itanium, thứ giờ đã trở nên vô dụng
Nhu cầu sản lượng từ các foundry có vẻ khổng lồ, nên tôi tò mò Microsoft hay Google làm chip riêng và cần sản xuất thì làm thế nào để chen lên đầu hàng
Liệu chip đó có đủ đơn giản để làm ở các fab “cũ và ít nhu cầu hơn” không? Theo tôi biết thì Apple và Nvidia đã chiếm nhiều sản lượng foundry rồi
https://en.wikipedia.org/wiki/Tensor_Processing_Unit#Product...
Họ cũng có hiện diện và chi tiêu đáng kể trong các mảng như HBM, và SemiAnalysis có vài bài viết hay liên quan
Tôi tò mò phần cứng sẽ thay đổi thế nào nếu LLM thực sự phổ biến mạnh với lượng tử hóa -1, 0, 1