Giải thích chi tiết về Module: Cha đẻ của LLVM tạo ra ngôn ngữ engine AI trong tương lai như thế nào?

Cấu trúc của bài viết này

**1.Trình biên dịch là gì? **

2. Giới thiệu về Chris Lattner, cha đẻ của LLVM

  • XLA và MLIR là gì *LLVM là gì?
  • Tiếng kêu là gì *Mối quan hệ giữa Clang và LLVM

3.Giới thiệu về mô-đun

  • Mô-đun——động cơ trí tuệ nhân tạo
  • Giới thiệu về TPU của Google
  • Về học sâu và khả năng lập trình
  • Những thách thức kỹ thuật trong việc chế tạo động cơ thực sự là gì?

4. Về tinh thần kinh doanh, xây dựng đội ngũ kỹ sư và tương lai của AI

**1. Trình biên dịch là gì? **

Trình biên dịch là một công cụ phần mềm dịch các ngôn ngữ lập trình cấp cao thành mã thực thi của máy tính. Trình biên dịch chuyển đổi mã nguồn được lập trình viên viết thành các lệnh nhị phân mà máy tính có thể hiểu và thực thi. Các lệnh này được đóng gói thành Tệp hoặc thư viện thực thi để chạy các chương trình trên máy tính của bạn.

Quy trình công việc chính của trình biên dịch là mã nguồn → bộ tiền xử lý → ** trình biên dịch** → mã đối tượng → trình liên kết → các chương trình thực thi (utables)

Một ví dụ sinh động khác:

*Giáo viên: Các em hôm nay chúng ta học phép tính cộng. *

bla bla bla……

  • Trẻ: Thưa Thầy, chúng con đã học. *

Giáo viên: Bây giờ các em mới hiểu được 1+1=? Trình biên dịch

2. Chris Lattner, cha đẻ của LLVM

Trước khi nói về Modul, trước tiên chúng ta hãy nói về trải nghiệm của Chris Lattner. Anh sinh ra ở California vào năm 1978 và lớn lên ở Vùng Vịnh San Francisco. Anh bắt đầu lập trình khi còn rất trẻ. Sau đó, anh nhận được bằng cử nhân về lĩnh vực này. khoa học máy tính từ UC Berkeley và học tiến sĩ tại Đại học Stanford, tập trung vào tối ưu hóa trình biên dịch và tự động song song hóa.

Chris Lattner đã lãnh đạo việc phát triển LLVM trong thời gian làm Tiến sĩ. Nhờ LLVM, ông đã giành được Giải thưởng Phần mềm ACM 2012** (Giải thưởng Phần mềm ACM)****. Sau đó, Lattne được Apple thuê và chịu trách nhiệm cho nhiều dự án quan trọng tại Apple, bao gồm thiết kế và phát triển giao diện người dùng của trình biên dịch Clang, ngôn ngữ lập trình Swift (ngôn ngữ thay thế Objective-C) và sự cải thiện môi trường phát triển Xcode. Ngôn ngữ Swift phổ biến rộng rãi vì tính đơn giản và hiệu suất và được các nhà phát triển sử dụng để phát triển ứng dụng trên iOS, macOS và các nền tảng khác của Apple.

Sau khi rời Apple, Chris Lattner làm việc tại các công ty như Tesla và Google, đồng thời tiếp tục xuất bản các tài liệu nghiên cứu và tham gia vào các dự án nguồn mở trong lĩnh vực ngôn ngữ lập trình và công nghệ biên dịch. Ông chịu trách nhiệm lãnh đạo nhóm cơ sở hạ tầng Tensorflow tại Google. , đã tạo XLA và MLIR.

Ở đây chúng tôi giải thích XLA và MLIR là gì:

XLA (Đại số tuyến tính tăng tốc) là trình biên dịch đại số tuyến tính dành riêng cho miền có thể tăng tốc các mô hình TensorFlow, có thể mà không yêu cầu bất kỳ thay đổi nào đối với mã nguồn. Nó có thể **** cải thiện tốc độ chạy và cải thiện việc sử dụng bộ nhớ. ***

***MLIR (Biểu diễn trung gian đa cấp:Biểu diễn trung gian đa cấp) là một khung trình biên dịch. Thiết kế của nó tối ưu hóa trình biên dịch và về cơ bản bao gồm tất cả các phần chung của thiết kế trình biên dịch. , điều này rất quan trọng tạo điều kiện cho các nhà phát triển trình biên dịch. *

**Quan trọng hơn, LLVM là gì? **(Phần sau được trích từ cuốn sách tóm tắt, xem liên kết tham khảo để biết văn bản gốc)

**LLVM có thể được hiểu là tập hợp các trình biên dịch mô-đun, có thể tái sử dụng và các công nghệ chuỗi công cụ. LLVM (thực ra là tên đầy đủ của Low Level Virtue Machine, nhưng nó chưa bao giờ được sử dụng làm máy ảo) Vì vậy LLVM sau đây không phải là từ viết tắt mà là tên đầy đủ của dự án.

Sau đó chúng ta tiếp tục, Kiến trúc trình biên dịch truyền thống trông như thế này:

Tách ra, nó bao gồm:

  • Frontend: front-end (phân tích từ vựng, phân tích cú pháp, phân tích ngữ nghĩa, tạo mã trung gian)
  • Trình tối ưu hóa: trình tối ưu hóa (tối ưu hóa mã trung gian)
  • Backend: backend (tạo mã máy)

Kiến trúc LLVM trông như thế này

**Nói một cách chính xác thì LLVM đã có nhiều cải tiến trong trình biên dịch, chẳng hạn như: **

  • Front-end và back-end khác nhau sử dụng mã trung gian thống nhất Biểu diễn trung gian LLVM (LLVM IR)
  • Nếu bạn cần hỗ trợ một ngôn ngữ lập trình mới, bạn chỉ cần triển khai giao diện người dùng mới
  • Nếu bạn cần hỗ trợ một thiết bị phần cứng mới, bạn chỉ cần triển khai chương trình phụ trợ mới
  • Giai đoạn tối ưu hóa là giai đoạn phổ quát, nhắm đến LLVM IR hợp nhất, cho dù nó hỗ trợ ngôn ngữ lập trình mới hay thiết bị phần cứng mới thì không cần phải sửa đổi giai đoạn tối ưu hóa.
  • Ngược lại, front-end và back-end của GCC không quá tách biệt, front-end và back-end được ghép nối với nhau. Do đó, việc GCC hỗ trợ một ngôn ngữ mới hoặc nền tảng mục tiêu mới trở nên đặc biệt khó khăn.
  • LLVM hiện được sử dụng làm cơ sở hạ tầng chung để triển khai các ngôn ngữ được biên dịch tĩnh và thời gian chạy khác nhau (họ GCC, Java, .NET, Python, Ruby, Schema, Haskell, D, v.v.)

**Clang là gì? **

Một dự án con của dự án LLVM, giao diện người dùng của trình biên dịch C/C++/Objective-C dựa trên kiến trúc LLVM. So với GCC, Clang có những ưu điểm sau

  • Tốc độ biên dịch nhanh: Trên một số nền tảng, tốc độ biên dịch của Clang nhanh hơn đáng kể so với GCC (tốc độ biên dịch của OC ở chế độ Gỡ lỗi nhanh hơn GGC 3 lần)
  • Dung lượng bộ nhớ nhỏ: Bộ nhớ do AST do Clang chiếm giữ chỉ bằng khoảng 1/5 so với GCC
  • Thiết kế mô-đun: Clang áp dụng thiết kế mô-đun dựa trên thư viện, dễ dàng tích hợp với IDE và tái sử dụng cho các mục đích khác.
  • Thông tin chẩn đoán rất dễ đọc: Trong quá trình biên dịch, Clang tạo và lưu giữ một lượng lớn siêu dữ liệu chi tiết (siêu dữ liệu), có lợi cho việc gỡ lỗi và báo cáo lỗi.
  • Thiết kế rõ ràng và đơn giản, dễ hiểu, dễ mở rộng và nâng cao

Mối quan hệ giữa Clang và LLVM

Đối với kiến trúc tổng thể của LLVM, clang được sử dụng làm giao diện người dùng. LLVM theo nghĩa rộng đề cập đến toàn bộ kiến trúc LLVM và LLVM theo nghĩa hẹp nói chung đề cập đến phần phụ trợ LLVM (bao gồm tối ưu hóa mã và tạo mã mục tiêu).

Mã nguồn (c/c++) đi qua clang-> mã trung gian (sau một loạt tối ưu hóa, Pass được sử dụng để tối ưu hóa) --> mã máy

Tham khảo: Jianshu-12 tháng 8 năm 2018-Giải thích đơn giản giúp bạn hiểu LLVM là gì

3. Giới thiệu về Mô-đun

Mô-đun——Công cụ trí tuệ nhân tạo

  • C***Suy nghĩ của hris Lattner về trình biên dịch và tinh thần kinh doanh dưới dạng Mô-đun? **

C*hris Lattner:"Tôi tạo ra module không phải bằng búa tìm đinh, cũng không phải bằng sự đổi mới vì mục đích đổi mới. Hiện tại, đối với các công ty như OpenAI, một số ít nhân viên cần phải chi rất nhiều mất thời gian viết hạt nhân CUDA theo cách thủ công. . Tuy nhiên, tối ưu hóa cho trình biên dịch AI có thể được sử dụng để cải thiện sự cộng tác phần mềm và mở rộng khả năng của những người có kỹ năng và kiến thức khác nhau"

**"Hình thức cuối cùng của trình biên dịch là cho phép người dùng sử dụng mã hợp ngữ rất đơn giản để hoàn thành bất kỳ tác vụ nào và giải quyết vấn đề mà không cần phải biết nhiều về phần cứng. Vai trò thực sự của trình biên dịch là sử dụng mức độ trừu tượng cao hơn để thể hiện. **"

*"*FasterTransformer do NVIDIA ra mắt có thể mang lại những cải tiến hiệu suất rất lớn. Vì vậy, nhiều công ty mô hình và nhà phát triển lớn đang sử dụng FasterTransformer. Tuy nhiên, nếu bạn muốn đổi mới trong lĩnh vực Transformer, bạn sẽ bị giới hạn bởi FasterTransformer."

  • **Nói cách khác, vai trò của trình biên dịch nằm ở sự khái quát hóa của nó, làm thế nào để hiểu được sự khái quát hóa ở đây? **

C****hris Lattner: Nếu bạn muốn nhận được kết quả tương tự hoặc tốt hơn FasterTransformer, nhưng sử dụng các kiến trúc chung khác (ở đây là kiến trúc không phải Transformer), thì thông qua trình biên dịch, bạn có thể tận dụng tối đa cả hai worlds Kết quả là, có thể đạt được hiệu suất tuyệt vời tương tự trong khi nghiên cứu. Nói cách khác, tối ưu hóa ở cấp trình biên dịch có thể tương đương với một "công cụ AI" và hỗ trợ chuyển đổi kiến trúc LLM trong tương lai.

  • **Mojo hiện rất phổ biến và tương thích với hệ sinh thái Python, nhưng mục tiêu của Modul là xây dựng một công cụ trí tuệ nhân tạo thống nhất. Vậy theo quan điểm của ông, những vấn đề hiện nay cần giải quyết trong lĩnh vực nghiên cứu và phát triển trí tuệ nhân tạo là gì? **

Chris Lattner: Nếu quay trở lại năm 2015, 2016 và 2017, thời kỳ trí tuệ nhân tạo phát triển nhanh chóng, công nghệ của thời đại đó chủ yếu được dẫn dắt bởi TensorFlow và PyTorch. PyTorch xuất hiện muộn hơn TensorFlow một chút, nhưng cả hai đều có thiết kế giống nhau ở một số khía cạnh. **Tuy nhiên, những người xây dựng và thiết kế hệ thống TensorFlow và PyTorch chủ yếu có nền tảng về trí tuệ nhân tạo, phương trình vi phân và vi phân tự động, chưa giải quyết được vấn đề ranh giới giữa phần mềm và phần cứng. **

Vì vậy cần có Keras* (Lưu ý: Keras là thư viện mạng thần kinh nhân tạo mã nguồn mở được viết bằng Python. Nó có thể được sử dụng làm giao diện lập trình ứng dụng cấp cao cho Tensorflow, Microsoft-CNTK và Theano để thực hiện các mô hình deep learning. Thiết kế, gỡ lỗi, đánh giá, ứng dụng và trực quan hóa ) hoặc nn.Module (Lưu ý: nn.Module * là một khái niệm duy nhất của PyTorch và cũng là một lớp sẽ được áp dụng thường xuyên đã sử dụng*)*.

Lớp dưới cùng của những thứ này thực chất là các toán tử.Làm thế nào để thực hiện tích chập, nhân ma trận, thuật toán rút gọn và thao tác từng phần tử? Bạn cần sử dụng CUDA và Intel MKL (Thư viện hạt nhân toán học Intel), sau đó tiếp tục xây dựng trên những nền tảng này.

Mô hình này lúc đầu thì ổn, nhưng cũng có vấn đề, ban đầu có rất ít người vận hành, tuy nhiên, chỉ cần một phần cứng mới được giới thiệu, dù chỉ là một biến thể CPU mới được Intel giới thiệu thì độ phức tạp tính toán sẽ tiếp tục tăng. , Ngày nay, TensorFlow và PyTorch có hàng nghìn toán tử, mỗi toán tử được gọi là kernel và tất cả các kernel đều cần được con người viết thủ công.

(Lưu ý: IP trong ngành công nghiệp chip thường còn được gọi là lõi IP. Lõi IP dùng để chỉ thiết kế hoàn thiện của các mô-đun mạch có chức năng độc lập trong chip. Thiết kế mô-đun mạch này có thể được áp dụng cho các thiết kế chip khác có chứa mô-đun mạch này. dự án, từ đó giảm khối lượng công việc thiết kế, rút ngắn chu trình thiết kế và nâng cao tỷ lệ thành công của thiết kế chip.Thiết kế hoàn thiện của mô-đun mạch này thể hiện trí tuệ của nhà thiết kế và phản ánh quyền sở hữu trí tuệ của nhà thiết kế.Do đó, ngành công nghiệp chip sử dụng lõi IP để Biểu thị thiết kế trưởng thành của mô-đun mạch này. Lõi IP cũng có thể được hiểu là thành phần trung gian của thiết kế chip)

Nói cách khác, một khi phần cứng mới ra mắt, bạn phải viết lại hàng nghìn Kernel nên ngưỡng để vào phần cứng sẽ ngày càng cao hơn, hơn nữa, tình trạng này còn tạo ra nhiều khó khăn cho việc nghiên cứu khoa học. ít ai biết những hạt nhân này hoạt động như thế nào.

(Lưu ý: Vì việc phát triển kernel thường dành riêng cho các nền tảng phần cứng nên ngay cả nvidia cũng không phổ biến, chưa nói đến FPGA hoặc DPU. Toán tử tùy chỉnh là kênh chính để mở rộng khả năng tính toán của phần mềm nền tảng phần cứng)

Bạn cũng nên biết rằng hiện nay có rất nhiều người đang viết CUDA Kernel* (Lưu ý: Kernel: tên hàm do CUDA chạy trên GPU)*, nhưng trình độ kỹ năng của các kỹ sư ở đây hoàn toàn khác với các kỹ năng có thể đổi mới công nghệ kiến trúc mô hình. **Kết quả là nhiều hệ thống trí tuệ nhân tạo phải đối mặt với thách thức: họ không thể tìm được chuyên gia kỹ thuật có thể viết Kernel. **

*(Lưu ý: *Khi sử dụng GPU để tính toán, tất cả các quy trình tính toán có thể được gói gọn trong GPU Kernel và được thực thi trên GPU một cách tuần tự. Để linh hoạt, các thư viện toán tử truyền thống sẽ có thiết kế rất cơ bản nên có có rất nhiều trong số đó)

Giới thiệu về TPU của Google

Tôi đã tham gia dự án TPU của Google khi còn ở Google. Vào thời điểm đó, những thách thức mà nhóm TPU phải đối mặt bao gồm: Có hàng nghìn hạt nhân khác nhau trên thị trường, làm cách nào để tung ra một phần cứng mới? Vào thời điểm đó, nhiều đồng nghiệp cũng đề cập đến việc liệu có thể sử dụng trình biên dịch để thực hiện việc này hay không. **Vì vậy, thay vì viết tay hàng nghìn Kernel, viết lại tất cả các toán tử này và tạo hoàn toàn hệ sinh thái của riêng mình như Intel hay NVIDIA, trình biên dịch có thể linh hoạt hơn thủ công vì trình biên dịch có thể cho phép chúng ta thực hiện theo nhiều cách khác nhau. và Kernel phù hợp cũng có thể tối ưu hóa rất nhiều hiệu suất. **

**Trình biên dịch có thể đạt được điều này theo cách tổng quát, nhưng nếu chúng ta sử dụng Kernel viết tay truyền thống, kết quả đưa ra phải là một sự sắp xếp cố định của các Kernel mà mọi người cho là thú vị, chứ không phải là thứ gì đó mới mà các nhà nghiên cứu mong muốn. **Vì vậy, XLA của Google (Đã giải thích ở trên: Đại số tuyến tính tăng tốc: Đại số tuyến tính tăng tốc) đã ra đời. XLA có thể hỗ trợ các máy tính cấp exaflop quy mô lớn, nhưng vấn đề lại xuất hiện. XLA nổi lên để hỗ trợ TPU của Google.

**Việc xây dựng một trình biên dịch thực sự rất khó và vẫn còn các vấn đề về khả năng mở rộng. Hiện tại, các kỹ sư trình biên dịch phải được thuê để hoàn thành nhiều dự án kỹ thuật học máy và các kỹ sư biên dịch hiểu rõ về học máy và các kiến thức liên quan khác nhau thậm chí còn quan trọng hơn. đủ. Ngoài ra, XLA không có khả năng mở rộng và chỉ hoạt động với TPU. **

Giới thiệu về Deep Learning và khả năng lập trình

Nếu nhìn lại lịch sử phát triển CUDA và deep learning của NVIDIA như sự ra đời của AlexNet và sự phát triển của deep learning, nhiều người cho rằng sự ra đời của AlexNet là kết quả của sự kết hợp giữa dữ liệu, tính toán ImageNet + và sức mạnh của GPU. **

(Lưu ý: Vào năm 2012, Alex Krizhevsky và Ilya, học trò của Geoffrey Hinton, một trong ba gã khổng lồ về deep learning và là người đoạt Giải thưởng Turing, đã đề xuất AlexNet và giành chức vô địch với lợi thế đáng kể tại ILSVRC năm đó, vượt xa thứ ba thứ hai. Kết quả này đã thu hút sự chú ý lớn từ giới học thuật và ngành công nghiệp, và thị giác máy tính đã dần bước vào kỷ nguyên bị thống trị bởi học sâu)

**Nhưng nhiều người quên tầm quan trọng của "khả năng lập trình". **

Bởi vì chính CUDA đã cho phép các nhà nghiên cứu phát minh ra nhân tích chập mà trước đó chưa tồn tại và TensorFlow cũng chưa tồn tại vào thời điểm đó. **Trên thực tế, chính sự kết hợp giữa dữ liệu, tính toán và khả năng lập trình đã cho phép nghiên cứu mới khởi động toàn bộ làn sóng hệ thống học sâu. **

**Vì vậy, việc học hỏi từ các sự kiện và lịch sử trong quá khứ là rất quan trọng. Vì vậy, làm thế nào để bạn thực hiện bước tiếp theo? Làm cách nào để chúng ta bước sang kỷ nguyên tiếp theo của công nghệ này, nơi mọi người đều có thể hưởng lợi từ những ý tưởng và đổi mới thuật toán tuyệt vời của nhân loại? **Làm thế nào để hưởng lợi từ trình biên dịch? Làm thế nào bạn có thể tận dụng quy mô và tính linh hoạt của trình biên dịch để giải quyết các vấn đề mới? **Quan trọng nhất, bạn được hưởng lợi như thế nào từ khả năng lập trình? Đây là Mô-đun mà chúng tôi đang phát triển - công cụ trí tuệ nhân tạo. **

Về tương lai của trí tuệ nhân tạo

  • **Bạn nhìn nhận tương lai của việc phát triển trí tuệ nhân tạo như thế nào? Bạn có nghĩ rằng sẽ có nhiều sự hợp tác hơn giữa các nhóm có hồ sơ hoặc hướng đi khác nhau không? Một trong những mục tiêu của bạn có phải là giúp các chuyên gia không phải là người biên dịch sử dụng trình biên dịch dễ dàng hơn không? **

**Chris Lattner: **Con người thật tuyệt vời, nhưng không ai có thể đặt mọi thứ vào đầu mình. **Những người thuộc các loại và chuyên môn khác nhau làm việc cùng nhau có thể tạo ra thứ gì đó vĩ đại hơn những người khác. Ví dụ: tôi có một số khả năng , nhưng về cơ bản tôi không thể nhớ bất kỳ phương trình vi phân nào, phải không? Vì vậy, người phát minh ra kiến trúc LLM tiếp theo chắc chắn sẽ không phải là tôi (cười).

**Nhưng nếu tôi nghĩ về nó từ góc độ hệ thống, nếu tôi có thể khiến những người này đóng góp, cộng tác và hiểu cách thức hoạt động của những thứ này thì sẽ có một bước đột phá. ** Làm thế nào để quảng bá phát minh? Làm cách nào để có thêm nhiều người hiểu được các phần khác nhau của vấn đề thực sự cộng tác? **Vì vậy, việc khám phá Mojo và động cơ là một nỗ lực nhằm loại bỏ sự phức tạp của vấn đề. Bởi vì có nhiều hệ thống đã được xây dựng sẵn và được tổng hợp lại với nhau một cách đơn giản. **

Các giải pháp ở đây thường chỉ dựa trên việc giải quyết vấn đề chứ không được thiết kế từ trên xuống. Và tôi nghĩ rằng module cung cấp một stack đơn giản hơn có thể giúp giảm độ phức tạp của toàn bộ stack, nếu không refactor thì nó vẫn sẽ đi theo lịch sử phân mảnh và hỗn loạn* (phân mảnh trong lĩnh vực trí tuệ nhân tạo)* Một khi bạn muốn thay đổi một chút sẽ bị Crash, hiệu suất kém hoặc không hoạt động được, tình trạng này xuất phát từ sự phân mảnh của lớp bên dưới.

  • **Làm thế nào để hiểu trình biên dịch: Trình biên dịch và ngôn ngữ có phải là phương tiện cho sự cộng tác hoặc kết hợp giữa con người với nhau không? **

Chris Lattner: Tôi tạo ra Modul không phải để dùng búa tìm đinh, cũng không phải để đổi mới vì mục đích đổi mới. Hiện tại, đối với các công ty như OpenAI, một số ít nhân viên cần dành nhiều thời gian để viết CUDA theo cách thủ công hạt nhân. **Tuy nhiên, việc tối ưu hóa cho trình biên dịch AI có thể được sử dụng để cải thiện khả năng cộng tác trong phần mềm và mở rộng khả năng của những người có kỹ năng và kiến thức khác nhau. **

Hình thức cuối cùng của trình biên dịch là cho phép người dùng hoàn thành bất kỳ tác vụ nào và giải quyết vấn đề bằng cách sử dụng mã hợp ngữ rất đơn giản mà không cần phải biết nhiều về phần cứng.Vai trò thực sự của trình biên dịch là có thể thực hiện các tác vụ ở mức độ trừu tượng cao hơn . Chuyển phát nhanh. Trình biên dịch cũng là một cách để tự động hóa đúng cách các hoạt động tối ưu hóa phổ biến mà có thể yêu cầu lập trình thủ công.

Mục tiêu đầu tiên là làm cho quy trình trở nên hợp lý nhất có thể;

Mục tiêu thứ hai là nếu bạn đẩy nhiều điều phức tạp ra khỏi tâm trí, bạn có thể nhường chỗ cho những điều phức tạp mới. Ngoài ra, thông qua tính trừu tượng, bạn có thể tận dụng lợi thế của trình biên dịch - bởi vì trình biên dịch có sự chú ý vô hạn đến từng chi tiết, trong khi con người thì không;

**Mức độ trừu tượng cao hơn cũng có thể mang lại cho chúng ta nhiều khả năng khác. **Các hệ thống học sâu và Mô-đun đã nâng các phép tính lên cấp độ đồ họa. Giải thích thế nào? Ở đây, điều đó có nghĩa là một khi bạn thoát khỏi các câu lệnh lập trình phức tạp như vòng lặp for và trở nên khai báo hơn, điều đó có nghĩa là phải thay đổi phép tính. mô hình. Nhiều người vẫn chưa nhận ra điều này nhưng tôi nghĩ điều đó là có thể. Do hệ thống hiện tại dễ gây đau đầu nên nhiều chức năng được cung cấp bởi tính trừu tượng sẽ triển khai Pmap và Vmap (Lưu ý: Hai chức năng này bao gồm tính dẫn xuất tự động và song song hóa)

Sự cải tiến của công nghệ đã được hưởng lợi từ một số lượng lớn các hệ thống được cấu trúc tốt và có cấu trúc tốt, một số lượng lớn phần cứng máy tính hiệu năng cao mới và một số lượng lớn các đột phá đã được thực hiện ** Vì vậy, tôi rất hy vọng Mô-đun đó có thể được ứng dụng rộng rãi và phổ biến hơn, phá vỡ sự phức tạp của bộ truyện, điều này thật tuyệt vời. **

(Lưu ý: Điểm khác biệt lớn nhất giữa lập trình khai báo và lập trình thông thường là có thêm khái niệm về thời gian. Bạn có thể xác định quá khứ, hiện tại và tương lai, thay vì duy trì thời gian một chiều của toàn bộ liên kết thực thi. Với khái niệm này theo thời gian, nội dung định nghĩa có thể được đơn giản hóa và sau đó có thể thu được biểu đồ tính toán thông qua "khấu trừ", thay vì viết toán tử ở đây và toán tử ở đó và ghép một biểu đồ tĩnh)

  • **Bạn có thể định nghĩa công cụ trí tuệ nhân tạo, khung trí tuệ nhân tạo và trình biên dịch trí tuệ nhân tạo của Mô-đun không? **

Chris Lattner: Hầu hết mọi người sẽ sử dụng các công cụ như PyTorch khi đào tạo các mô hình lớn. Trong kịch bản như vậy, CUDA hoặc Intel MKL sẽ sớm được giới thiệu. Tôi gọi chung các loại động cơ này và đề cập đến động cơ, nó chủ yếu đề cập đến giao diện phần cứng và Mô-đun cung cấp một công cụ mới có thể giới thiệu TensorFlow, PyTorch và các công cụ khác. Sau đó, người dùng có thể điều khiển các hoạt động và thực hiện lập trình phần cứng theo cách mới, dựa trên sự trừu tượng hóa chính xác, bạn có thể tạo ra các triển khai thú vị.

  • Theo định nghĩa của bạn, Mô-đun dựa trên lớp khung và lớp phần cứng. Sau đó, chúng tôi muốn biết petaflops (** số thao tác dấu phẩy động có thể được thực hiện mỗi giây****) của Mô-đun trên A100 nhưng mình thấy trang web toàn CPU, không thấy GPU. Vì vậy, câu hỏi của tôi là, mọi người đều đang nỗ lực để làm cho GPU nhanh hơn, vậy tại sao bạn lại muốn để CPU chạy trước? **

Chris Lattner: Nghĩ từ những nguyên tắc đầu tiên, chúng ta phải bắt đầu từ đầu. Bạn định nghĩa thế nào về hệ thống trí tuệ nhân tạo ngày nay? Nhiều người nói về GPU hàng ngày và tranh luận về GPU, dường như mọi thứ đều liên quan đến GPU. Tuy nhiên, trí tuệ nhân tạo thực chất là một bài toán tính toán song song, không đồng nhất, có quy mô lớn. Do đó, trí tuệ nhân tạo truyền thống bắt đầu bằng việc tải dữ liệu và GPU không tải dữ liệu, do đó bạn phải thực hiện một loạt tác vụ như tải dữ liệu, tiền xử lý và kết nối mạng cũng như một số lượng lớn các phép tính ma trận.

Để điều khiển GPU, chắc chắn cần có CPU. Khi chúng tôi phát triển phần mềm cho Accelerator, chúng tôi sẽ thấy có nhiều vấn đề khác nhau tồn tại và điều mà các nhà phát triển cho là quan trọng lại là một phần quan trọng của vấn đề mà họ muốn giải quyết. Vì vậy, mọi người đều xây dựng một hệ thống dựa trên vấn đề và nó phải được thiết kế hoàn toàn theo yêu cầu của con chip. **

**Từ góc độ kỹ thuật, Modul muốn xây dựng một trình biên dịch phổ quát, vì nó dễ dàng chuyển từ phổ quát sang dọc, nhưng kinh nghiệm của tôi với XLA là không khả thi khi bắt đầu với một thứ gì đó chuyên biệt rồi khái quát hóa nó. . **

Đối với ngành trí tuệ nhân tạo, quy mô đào tạo tỷ lệ thuận với quy mô nhóm nghiên cứu, trong khi quy mô suy luận tỷ lệ thuận với quy mô sản phẩm, cơ sở người dùng, v.v. **Do đó, rất nhiều suy luận vẫn được thực hiện trên CPU. Vì vậy, chúng tôi quyết định bắt đầu với CPU và cải thiện kiến trúc trước, CPU dễ sử dụng hơn và sẽ không bị thiếu, sau khi kiến trúc chung hoàn thành, chúng tôi có thể tiếp tục mở rộng. Sau đó, chúng tôi hiện cũng đang nghiên cứu GPU, loại GPU này sẽ sớm ra mắt và sẽ được mở rộng sang các loại Bộ tăng tốc khác nhau này theo thời gian. **

  • **Những thách thức kỹ thuật trong việc chế tạo động cơ thực sự là gì? **

Chris Lattner: Các thành viên trong nhóm của chúng tôi về cơ bản đã được tiếp xúc với tất cả các trình biên dịch và các đơn vị liên quan trong ngành. Ví dụ: tôi đã tham gia nghiên cứu về XLA và TensorFlow, ngoài ra còn có các thành viên từ PyTorch, TVM, Intel OpenVINO và Onyx Runtime.Thách thức đối với mọi người là rất nhiều hệ thống đã được thiết kế cách đây 5 đến 8 năm. Trí tuệ nhân tạo thời đó khác với bây giờ, chưa có mô hình ngôn ngữ lớn.

**Vấn đề là khi bạn xây dựng một hệ thống, nó bắt đầu như một đống mã và sau đó ngày càng lớn hơn, lớn hơn, lớn hơn. Và hệ thống càng phát triển nhanh thì càng khó thực hiện những thay đổi cơ bản. Vì thế chúng tôi quyết định làm lại từ đầu. **

Nếu bạn vẫn muốn có thể viết Kernel bằng tay, trước tiên chúng tôi sẽ tạo nguyên mẫu bằng C++, sau đó dần dần giới thiệu mojo, nghĩa là bạn có thể xây dựng một trình biên dịch hợp nhất tự động rất phức tạp áp dụng tất cả các công nghệ tiên tiến nhất và cũng vượt trội hơn. những cái tiên tiến nhất.

Chúng tôi biết rằng người dùng ghét các Giới hạn về Hình dạng Tĩnh và việc thiếu khả năng lập trình. Ví dụ: họ không muốn chỉ bị ràng buộc với Tensor* (Lưu ý: Tensor thực sự là một mảng đa chiều, với mục đích tạo ra các ma trận và vectơ có chiều cao hơn. Nhiều mô hình lớn có Tensor không đều)*

  • **Có mục tiêu thiết kế nào cho Mô-đun không? Hay nguyên tắc? **

Chris Lattner: Tôi không biết liệu mình có một bộ nguyên tắc có hệ thống hay không. Nghe có vẻ như việc có một bộ nguyên tắc cũng giống như việc cầm một chiếc búa và thấy mọi thứ đều là một cái đinh. **Nhưng phần lớn những gì chúng tôi phải làm là khai thác tiềm năng của phần cứng và thực hiện nó theo cách cực kỳ dễ sử dụng. Vì vậy, rất nhiều điều kiện khởi đầu không liên quan đến việc kích hoạt những điều mới mà tập trung nhiều hơn vào việc giải quyết các vấn đề phức tạp để hoàn thành công việc, vì vậy nó giống thiết kế và kỹ thuật hơn. **

Nếu bạn trò chuyện với một công ty LLM, có thể dễ dàng nhận thấy rằng họ đã chi hơn 200 triệu đô la Mỹ cho GPU và GPU A100 với kích thước bộ nhớ cụ thể **Mọi người đều muốn có được mọi khả năng thông qua GPU (sức mạnh tính toán). Một mặt, có nhiều người muốn vào bên trong con chip và mở khóa tiềm năng, nhưng cũng có nhiều người khác muốn có tính di động, tính tổng quát và tính trừu tượng cao hơn. **

Do đó, thách thức ở đây là làm thế nào để kích hoạt và thiết kế hệ thống đạt được tính trừu tượng theo mặc định mà không phải từ bỏ tất cả chức năng. Tương tự, nhiều trình biên dịch, đặc biệt là trình biên dịch học máy, về cơ bản chỉ cố gắng bao quát một điểm cụ thể trong không gian và chức năng của chúng không phổ biến.

Một điều nữa là chúng ta quan tâm đến người dùng, vì nhiều người bị ám ảnh bởi công nghệ mà quên rằng chân dung người ứng dụng công nghệ và người tạo ra công nghệ hoàn toàn khác nhau, chúng ta cần hiểu ý tưởng của các nhà phát triển sử dụng công cụ.

  • **Modular vừa được phát hành để tải xuống và sử dụng dựa trên Linux Mojo trong vài ngày qua. Phiên bản MacOS và Windows sẽ sớm được phát hành. Vậy những bộ công cụ và thành phần nào khác sẽ có sẵn trong sáu đến chín tháng tới kể từ bây giờ? **

**Chris Lattner:**Mojo vẫn là một ngôn ngữ trẻ và chúng tôi sẽ dần dần làm việc với hệ sinh thái để làm cho nó ngày càng trưởng thành hơn. Chúng tôi muốn có một cộng đồng lớn xung quanh Mojo để cùng nhau xây dựng những thứ thú vị. Để đạt được mục tiêu này, chúng tôi sẽ dần dần mở Mojo nguồn và mọi người phải cùng nhau giải quyết nhiều chi tiết để xây dựng một hệ sinh thái hoạt động tốt chứ không chỉ là một mớ hỗn độn.

Giống như thảm họa Python 2-3 mà ai cũng từng trải qua, không ai muốn nhớ lại* (Lưu ý: Hơn 80% hai cú pháp không tương thích và do các vấn đề lịch sử, nhiều bản phân phối Linux dựa vào py2 ở phía dưới, nhưng Người dùng vô tình sử dụng py3 và pip install xxx đã làm hỏng hệ thống). *

**Q: Mối quan hệ của bạn với Guido là gì (*****Lưu ý: Kỹ sư người Hà Lan Guido van Rossum, người đã phát minh ra ngôn ngữ Python) và Python Foundation? Chúng có liên quan với nhau như thế nào? **

Chris Lattner: Guido biết Mojo sẽ đến và Guido đã dành nhiều thời gian cho đội của chúng tôi và chúng tôi cảm thấy rất may mắn. Thỉnh thoảng anh ấy xuất hiện trong cộng đồng Discord mojo và đưa ra những câu hỏi khó cho tôi, điều này thật tuyệt vời.

Chúng tôi tin rằng mojo là một thành viên của gia đình Python, tất nhiên có rất nhiều thành viên trong gia đình Python, bao gồm cả PyPy và Cython, v.v. Chúng tôi hy vọng rằng Python có thể tiếp tục phát triển và tiếp tục bổ sung thêm nội dung mới. Mojo cũng tiếp tục phát triển và bổ sung thêm nội dung mới.

Quay trở lại 30, 40 năm trước, khi còn có ngôn ngữ C, sau đó một thứ mới gọi là C++ xuất hiện vào năm 1983. C++ thực chất là ngôn ngữ C có các lớp (Lưu ý: Năm 1979, Bjame Sgoustrup đến Bell Labs và bắt đầu chuyển đổi C thành ngôn ngữ có lớp. Năm 1983, ngôn ngữ này có tên chính thức là C++)

Điều xảy ra vào thời điểm đó là C và C++ khởi đầu là hai cộng đồng khác nhau, nhưng có rất nhiều sự hội tụ, chia sẻ ý tưởng và trao đổi ý tưởng giữa chúng.

Tất nhiên, tất cả các tính năng của ngôn ngữ C cuối cùng đã được tích hợp vào C++. Vì vậy tôi hy vọng điều tương tự sẽ xảy ra với Mojo và Python.

Về tinh thần khởi nghiệp và xây dựng đội ngũ kỹ thuật

  • **Đã có rất nhiều nhà sáng lập như bạn có sự nghiệp kỹ sư lâu dài và tuyệt vời. Đột nhiên, đó là CEO. Vậy bạn đã học được gì về việc xây dựng nhóm và huấn luyện người khác? Đặc biệt sau khi trở thành kỹ sư, bây giờ bạn còn phải là người lãnh đạo sản phẩm và chịu trách nhiệm về tài chính, bạn nghĩ sao? **

**Chris Lattner:**Tại module, tôi và người đồng sáng lập Tim có mối quan hệ rất thân thiết và rất bổ sung cho nhau. Trong quá trình khởi nghiệp, việc có người để trò chuyện thực sự rất quan trọng. Những gì tôi đang trải qua bây giờ là điều tôi chưa từng trải qua với tư cách là lãnh đạo kỹ thuật tại Google và Apple.

**Khi chúng tôi thành lập công ty này, niềm tin của chúng tôi là - hiểu được nỗi đau. Đại diện cho một công ty lớn khác với việc đại diện cho một công ty mới thành lập, khi công ty khởi nghiệp thực sự được thành lập, tôi sẽ là trưởng nhóm kỹ thuật và bắt đầu thành lập đội ngũ kỹ thuật, còn Tim sẽ chịu trách nhiệm về công việc kinh doanh và sản phẩm, còn sẽ chịu trách nhiệm về công việc khi không có công ty lớn Giao tiếp với các công ty (khách hàng) khác nhau dưới bầu không khí của nhà máy. Ví dụ, điểm yếu hiện tại của bạn là gì? **

Hiện tại bạn đang làm việc gì? Những thách thức là gì? Làm thế nào chúng ta có thể giúp đỡ? Bạn nghĩ gì về những gì chúng tôi đang làm? Với tư cách là Mô-đun, thách thức mà chúng tôi gặp phải là những gì chúng tôi muốn xây dựng thực sự là một vấn đề kỹ thuật siêu khó và rất trừu tượng.

**Để giải quyết những vấn đề khó khăn này đòi hỏi phải thuê những chuyên gia kỹ thuật rất đắt tiền từ tất cả các công ty công nghệ lớn. Vì vậy, tôi phải huy động rất nhiều vốn, động viên nhân viên thật tốt, trả lương cho họ và khiến nhân viên cảm thấy thoải mái. **

Chúng tôi đối mặt trực tiếp với khách hàng và nhìn thấy nỗi đau của khách hàng trong lĩnh vực trí tuệ AI. Việc xây dựng và triển khai nhiều thứ thực sự là một mớ hỗn độn, và mọi người đều bị mắc kẹt bởi quá nhiều thứ không hiệu quả. Vì vậy, tầm nhìn của chúng tôi là hợp nhất tất cả những điều này với module.

Nhưng vấn đề lại xuất hiện, trong quá trình phát triển sản phẩm, sản phẩm cũng liên tục thay đổi và nhu cầu cũng sẽ tiếp tục thay đổi theo thời gian. Vì vậy, những gì nhóm chúng tôi làm việc cùng đã kết thúc với mức độ phức tạp rất cao, với rất nhiều hệ thống lộn xộn khác nhau được phát triển cho các trường hợp đặc biệt khác nhau.

  • **Kinh nghiệm làm Trưởng nhóm Kỹ thuật: Có nhiều kinh nghiệm xây dựng nhóm và tuyển dụng kỹ sư. Bạn có kinh nghiệm hoặc đề xuất gì về quản lý dự án không? **

Chris Lattner: Công việc của tôi là giúp nhóm giành chiến thắng. Bạn phải xác định chiến thắng là gì, mang đến cho mọi người tầm nhìn rõ ràng, mục tiêu rõ ràng và giữ cho mọi người luôn đồng lòng. **Khi bạn có một nhóm lớn những người rất giỏi những người xung quanh bạn Khi mọi người đều muốn trở thành anh hùng, một mục tiêu rõ ràng là rất quan trọng. Khi năng lượng tiềm năng được đặt chồng lên nhau, sự tiến bộ lớn sẽ đạt được nhanh chóng, nhưng khi nó bị đảo ngược, động lượng sẽ bị bù đắp. **

Trong nội bộ, cá nhân tôi thường tham gia vào việc giúp xây dựng cơ sở hạ tầng ban đầu và điều quan trọng là phải cho nhóm thấy nó sẽ hoạt động như thế nào và đó là một phần văn hóa của chúng tôi. Điều quan trọng nhất đối với tôi ở đội ngũ kỹ thuật là tốc độ triển khai, nếu đợi 24h hoặc 3 tuần để chạy CI thì mọi thứ sẽ chậm lại.

Khi tuyển dụng và khi bạn tiếp tục phát triển nhân viên của mình, bạn cũng muốn xác định xem nhân viên đó giỏi ở điểm gì, phải không? Tôi thực sự tin rằng nếu bạn có một đội ngũ thực sự giỏi, thực sự đam mê và bạn kết hợp họ với những việc họ thực sự muốn làm, họ sẽ có siêu năng lực.

Vì vậy, nhiều khi chúng tôi muốn đảm bảo rằng mọi người đang giải quyết đúng vấn đề. Bằng cách này, họ có thể phát triển, làm mọi việc, thúc đẩy và đưa ra quyết định một cách độc lập. Nhưng nhiều lúc, mọi người sẽ rất tập trung vào sản phẩm, hoặc có người đặc biệt giỏi kinh doanh, tập trung vào khách hàng và những vấn đề mà khách hàng gặp phải. Nhưng bạn không thể giải quyết và xây dựng một sản phẩm nếu không có đội ngũ.

**Tôi rất thích Tim vì anh ấy thực sự giỏi ở những lĩnh vực mà tôi chưa giỏi và mọi người đều học hỏi lẫn nhau. **

Giới thiệu về ChatGPT và Trí tuệ nhân tạo

Sự bùng nổ của ChatGPT cực kỳ thú vị, đối với những người đã chú ý đến trí tuệ nhân tạo từ lâu như chúng tôi, ChatGPT có nghĩa là một kiểu đổi mới giao diện người dùng và khiến mọi người nhận ra sức mạnh của trí tuệ nhân tạo. Nhìn lại, tôi nghĩ điều này đã nâng cao vị thế của AI trong nhận thức của công chúng trong vài năm.

**Bí ẩn thú vị nhất chưa có lời giải trong lĩnh vực trí tuệ nhân tạo là gì? **

Chris Lattner: Tôi nghĩ trí tuệ nhân tạo hiện đang ở giai đoạn trưởng thành. Có rất nhiều người thông minh có những quan niệm khác nhau về AI là gì, phải không? Một số người nghĩ rằng mọi thứ nên là mạng lưới thần kinh end-to-end và phần mềm sẽ biến mất. Tôi nghĩ câu hỏi cần được trả lời là, sự cân bằng giữa thuật toán đào tạo và thuật toán thiết kế thông minh là gì? Cá nhân tôi không nghĩ đó là tất cả, nếu bạn muốn xây dựng một máy dò mèo thì CNN thực sự là một cách tốt để làm điều đó. Nếu bạn muốn viết bộ nạp khởi động hoặc hệ điều hành, việc triển khai nó bằng vòng lặp for sẽ hoạt động tốt. **Nhưng những thứ này sẽ được loại bỏ dần theo thời gian ở đâu? Làm cách nào chúng tôi có thể khiến các nhà phát triển ứng dụng suy nghĩ nhất quán hơn về những bài thuyết trình này? **

**Chúng tôi đặt cược cho tương lai rằng AI cuối cùng sẽ trở thành một phần trong bộ công cụ giúp mọi người suy nghĩ về cách xây dựng ứng dụng như một phương pháp phát triển phần mềm. Không chỉ các ứng dụng iPhone hoặc các dạng tương tự, mà còn toàn bộ dịch vụ đám mây, đường truyền dữ liệu và cuối cùng là xây dựng lặp lại toàn bộ sản phẩm người dùng. Tất nhiên, chúng tôi vẫn đang trên con đường khám phá. **

*Cảm ơnEvolution of Technology Life** tới tất cả bạn bè của tôi vì họ đã liên tục ủng hộ tác giả trong những năm qua và cảm ơn ChaosAI**

*Cảm ơn Dakai, AsyncGreed, Zhang Bo, Mao Li, Ethan và Mew vì sự giúp đỡ chuyên môn của họ

người giới thiệu:

1.

2. Tham khảo: IP được nhắc đến trong ngành chip là gì? -Xin Luận-Trời cao mây đen Andi863

3.Trang chủ của Chris Lattner (nondot.org)

4.nn.function và nn.Module- Liang Yun 1991 Nhà thực phẩm thuật toán 2020-07-10 21:47

5. Tham khảo: Jianshu-12 tháng 8 năm 2018-Giải thích đơn giản giúp bạn hiểu LLVM là gì

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • Bình luận
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)