4. Про підприємництво, формування команди інженерів і майбутнє ШІ
**1. Що таке компілятор? **
Компілятор — це програмний інструмент, який перетворює мови програмування високого рівня у виконуваний комп’ютером код. Компілятор перетворює вихідний код, написаний програмістом, у двійкові інструкції, які комп’ютер може зрозуміти та виконати. Ці інструкції упаковуються у виконуваний файл або бібліотеку для запуску програм на комп’ютері.
Основним робочим процесом компілятора є вихідний код → препроцесор → компілятор → об’єктний код → компонувальник → виконувані програми (utables)
Ще один яскравий приклад:
*Вчитель: Діти, сьогодні ми вчимо додавання. *
бла-бла-бла ……
*Діти: Вчителю, ми навчилися. *
Вчитель: Тепер ви можете зрозуміти 1+1=? Компілятор
2. Кріс Латтнер, батько LLVM
Перш ніж говорити про Modular, давайте спершу поговоримо про досвід Кріса Латтнера. Він народився в Каліфорнії в 1978 році та виріс у районі затоки Сан-Франциско. Він почав програмувати, коли був дуже молодим. Пізніше він отримав ступінь бакалавра в інформатики в Каліфорнійському університеті в Берклі та навчався на докторську дисертацію в Стенфордському університеті, зосереджуючись на оптимізації компілятора та автоматичному розпаралелюванні.
Кріс Латтнер очолював розробку LLVM під час свого доктора філософії. Завдяки LLVM він отримав нагороду ACM Software Award 2012** (ACM Software Award)****. Після цього Латтне був прийнятий на роботу в Apple і відповідав за багато важливих проектів в Apple, включаючи дизайн і розробку інтерфейсу компілятора Clang, мови програмування Swift (мова, яка замінила Objective-C) і вдосконалення середовища розробки Xcode. Мова Swift широко популярна завдяки своїй простоті та продуктивності і використовується розробниками для розробки програм на iOS, macOS та інших платформах Apple.
Після відходу з Apple Кріс Латтнер працював у таких компаніях, як Tesla та Google, і продовжував публікувати дослідницькі статті та брати участь у проектах з відкритим кодом у сфері мов програмування та технологій компілятора.Він відповідав за керівництво командою інфраструктури Tensorflow. у Google. створив XLA та MLIR.
Тут ми пояснюємо, що таке XLA та MLIR:
XLA (Accelerated Linear Algebra) — компілятор лінійної алгебри, орієнтований на предметну область, який може пришвидшити моделі TensorFlow, потенційно не вимагаючи жодних змін у вихідному коді. Це може **** покращити швидкість бігу та покращити використання пам’яті. ***
***MLIR (Багаторівневе проміжне представлення:Багаторівневе проміжне представлення) — це структура компілятора. Його дизайн оптимізує компілятор і в основному охоплює всі загальні частини дизайну компілятора. , що значною мірою полегшує розробникам компіляторів. *
**Що більш важливо, що таке LLVM? **(Нижче подано уривок із короткої книги, оригінальний текст дивіться за посиланням)
**LLVM можна розуміти як набір модульних багаторазових компіляторів і технологій ланцюга інструментів. LLVM (насправді повна назва Low Level Virtue Machine, але вона ніколи не використовувалася як віртуальна машина) Отже, наступна LLVM не є акронімом; це повна назва проекту.
Потім ми продовжуємо: Традиційна архітектура компілятора виглядає так:
**Щоб описати це точно, LLVM вніс багато інновацій у компілятор, наприклад: **
Різні інтерфейси та сервери використовують уніфікований проміжний код LLVM Intermediate Representation (LLVM IR)
Якщо вам потрібна підтримка нової мови програмування, вам потрібно лише реалізувати новий інтерфейс
Якщо вам потрібна підтримка нового апаратного пристрою, вам потрібно лише реалізувати нову серверну систему
Фаза оптимізації є універсальною фазою. Вона націлена на уніфікований LLVM IR. Незалежно від того, чи підтримує вона нові мови програмування чи нові апаратні пристрої, немає необхідності змінювати фазу оптимізації.
На відміну від цього, інтерфейс і бек-енд GCC не надто розділені, а інтерфейс і бек-енд поєднані разом. Таким чином, для GCC стає особливо важко підтримувати нову мову або нову цільову платформу.
LLVM тепер використовується як загальна інфраструктура для реалізації різних статичних і скомпільованих мов виконання (сімейство GCC, Java, .NET, Python, Ruby, Scheme, Haskell, D тощо)
**Що таке Clang? **
Підпроект проекту LLVM, інтерфейс компілятора C/C++/Objective-C на основі архітектури LLVM. У порівнянні з GCC Clang має наступні переваги
Швидка швидкість компіляції: На деяких платформах швидкість компіляції Clang значно вища, ніж GCC (швидкість компіляції OC у режимі налагодження в 3 рази більша, ніж GGC)
Невеликий обсяг пам’яті: пам’ять, яку займає AST, створений Clang, становить приблизно одну п’яту від пам’яті GCC
Модульний дизайн: Clang використовує модульний дизайн на основі бібліотеки, який легко інтегрувати з IDE і повторно використовувати для інших цілей.
Діагностична інформація добре читається: під час процесу компіляції Clang створює та зберігає велику кількість детальних метаданих (метаданих), що є корисним для налагодження та звітування про помилки.
Дизайн зрозумілий і простий, його легко зрозуміти, легко розширити та покращити
Відносини між Clang і LLVM
Для загальної архітектури LLVM clang використовується як інтерфейс. LLVM у широкому сенсі відноситься до всієї архітектури LLVM, а LLVM у загальному вузькому значенні відноситься до серверної частини LLVM (включаючи оптимізацію коду та генерацію цільового коду).
Вихідний код (c/c++) проходить через clang--> проміжний код (після серії оптимізацій для оптимізації використовується Pass) --> машинний код
Довідка: Jianshu-12 серпня 2018 р.-Просте пояснення, яке допоможе вам зрозуміти, що таке LLVM
3. Про Modular
Модульний ——система штучного інтелекту
**Д****Кріс Латтнер думає про компіляторів і підприємництво як модульність? **
C****hris Lattner: «Я створив Modular не за допомогою молотка, який шукає цвяхи, і не за допомогою інновацій заради інновацій. Наразі для таких компаній, як OpenAI, невеликій кількості працівників потрібно багато витрачати часу на написання ядер CUDA вручну. Проте оптимізацію для компіляторів AI можна використовувати для покращення співпраці програмного забезпечення та розширення можливостей людей з різними навичками та знаннями"
**"Остаточна форма компілятора полягає в тому, щоб дозволити користувачам використовувати дуже простий асемблерний код для виконання будь-яких завдань і вирішення проблем, не знаючи багато про апаратне забезпечення. Справжня роль компілятора полягає у використанні вищого рівня абстракцій для вираження. **"
*"*FasterTransformer, запущений NVIDIA, може значно підвищити продуктивність. Тому багато великих модельних компаній і розробників використовують FasterTransformer. Однак, якщо ви хочете впроваджувати інновації в області Transformer, FasterTransformer вас обмежить."
**Іншими словами, роль компілятора полягає в його узагальненні.Як тут розуміти узагальнення? **
C****hris Lattner: Якщо ви хочете отримати ті самі або кращі результати, що й FasterTransformer, але використовуючи інші загальні архітектури (тут архітектури, які не є Transformer), тоді за допомогою компілятора ви можете отримати найкраще з обох worlds У результаті під час дослідження можна отримати таку ж чудову продуктивність.Іншими словами, оптимізація на рівні компілятора може бути еквівалентною «двигуну ШІ» та допомогти у трансформації архітектури LLM у майбутньому.
**Mojo наразі дуже популярний і сумісний з екосистемою Python, але метою Modular є створення єдиного механізму штучного інтелекту. Отже, з вашої точки зору, які поточні проблеми необхідно вирішити в галузі досліджень і розробок штучного інтелекту? **
Кріс Латтнер: Якщо ми повернемося до 2015, 2016 і 2017 років, періоду бурхливого розвитку штучного інтелекту, технологія тієї епохи в основному очолювалася TensorFlow і PyTorch. PyTorch з’явився трохи пізніше TensorFlow. , але вони обидва є схожими дизайнами в деяких аспектах. **Однак люди, які створюють і проектують системи TensorFlow і PyTorch, в основному мають досвід роботи зі штучним інтелектом, диференціальними рівняннями та автоматичним диференціюванням. Вони не вирішили граничну проблему програмного та апаратного забезпечення. **
Отже, потрібен Keras* (Примітка: Keras — це бібліотека штучної нейронної мережі з відкритим вихідним кодом, написана мовою Python. Її можна використовувати як інтерфейс прикладного програмування високого рівня для Tensorflow, Microsoft-CNTK і Theano для створювати моделі глибокого навчання Дизайн, налагодження, оцінка, застосування та візуалізація ) або nn.Module (Примітка: nn.Module * — це концепція, унікальна для PyTorch, а також клас, який часто використовується*)*.
Нижній рівень цих речей - це фактично оператори.Як реалізувати згортку, множення матриці, алгоритм редукції та поелементну операцію? Вам потрібно використовувати CUDA та Intel MKL (Intel Math Kernel Library), а потім продовжувати будувати на цих засадах.
На початку ця модель є нормальною, але проблема також існує. Спочатку дуже мало операторів. Однак, поки з’являється нове апаратне забезпечення, навіть якщо це лише новий варіант процесора, представлений Intel, обчислювальна складність буде продовжують зростати. Сьогодні TensorFlow і PyTorch мають тисячі операторів, кожен з яких називається ядром, і всі ядра мають бути написані людьми вручну.
(Примітка: IP у промисловості чіпів зазвичай також називають IP-ядром. IP-ядро стосується розробленої конструкції схемних модулів із незалежними функціями в чіпі. Цю схему схемного модуля можна застосувати до інших чіпів, які містять цей схемний модуль. проекту, тим самим зменшуючи робоче навантаження на проектування, скорочуючи цикл проектування та покращуючи рівень успішності проектування чіпа. Зрілий дизайн цього схемного модуля втілює в собі мудрість дизайнера та відображає права інтелектуальної власності розробника. Тому індустрія чіпів використовує ядра IP для Вказує на зрілу конструкцію цього схемного модуля. IP-ядро також можна розуміти як проміжний компонент конструкції мікросхеми)
Іншими словами, після запуску нового апаратного забезпечення вам доведеться переписати тисячі ядер, тому поріг для входу в апаратне забезпечення буде ставати все вищим і вищим. Більш того, ця ситуація також створює багато труднощів для наукових досліджень. Наприклад, дослідник, дуже мало хто знає, як працюють ці ядра.
(Примітка: оскільки розробка ядра часто стосується апаратних платформ, навіть nvidia не є універсальною, не кажучи вже про FPGA або DPU. Спеціальні оператори є основним каналом для розширення обчислювальних можливостей програмного забезпечення апаратної платформи)
Ви також повинні знати, що зараз багато людей пишуть CUDA Kernel* (Примітка: Kernel: назва функції, яку запускає CUDA на GPU)*, але профіль навичок інженерів тут повністю відрізняється від навичок, які можуть інновувати архітектура моделі. **У результаті багато систем штучного інтелекту стикаються з такою проблемою: вони не можуть знайти технічних експертів, які можуть написати ядро. **
*(Примітка: *У разі використання графічного процесора для обчислення всі процеси обчислення можуть бути інкапсульовані в ядро графічного процесора та виконуватися на графічному процесорі послідовно. Задля універсальності традиційні бібліотеки операторів будуть використовуватися. Дизайн дуже простий, тому їх багато)
Про Google TPU
Коли я працював у Google, я брав участь у проекті Google TPU. У той час команда TPU мала такі проблеми: на ринку тисячі різних ядер, як запустити нове обладнання? У той час багато колег також згадували, чи можна використати компілятор для цього. **Отже, замість того, щоб вручну писати тисячі ядер, переписувати всі ці оператори та повністю створювати власну екосистему, як Intel або NVIDIA, компілятор може бути більш гнучким, ніж ручний, оскільки компілятор може дозволити нам робити це різними способами. і відповідне ядро також може оптимізувати багато продуктивності. **
**Компілятори можуть досягти цього узагальненим способом, але якщо ми використовуємо традиційне ядро, написане від руки, виходить фіксоване розташування ядер, яке люди вважають цікавим, а не щось нове, що хочеться дослідникам. **Так народилася XLA від Google (Пояснено вище: Accelerated Linear Algebra: Accelerated Linear Algebra). XLA може підтримувати великі комп’ютери рівня exaflop, але проблема виникає знову: XLA з’явився для підтримки TPU Google.
**Створити компілятор справді важко, і все ще існують проблеми з масштабованістю. Наразі інженерів-компіляторів потрібно наймати для виконання багатьох інженерних проектів машинного навчання, а інженери-компілятори, які розуміються на машинному навчанні та різноманітних пов’язаних знаннях, є навіть важливішими. достатньо. Крім того, XLA не масштабується і працює лише з TPU. **
Про глибоке навчання та програмування
Якщо ми поглянемо назад на історію розвитку NVIDIA CUDA та глибокого навчання, наприклад народження AlexNet і розвиток глибокого навчання, багато людей вважають, що народження AlexNet є результатом поєднання даних, ImageNet + обчислення та потужність GPU. **
(Примітка: у 2012 році Алекс Крижевський та Ілля, учні Джеффрі Хінтона, одного з трьох гігантів глибокого навчання та лауреата премії Тюрінга, запропонували AlexNet і виграли чемпіонат зі значною перевагою в ILSVRC того року, значно перевищивши третій 2. Цей результат привернув велику увагу наукових кіл та промисловості, і комп’ютерне зір поступово вступило в еру, де домінує глибоке навчання)
**Але багато людей забувають про важливість «програмованості». **
Тому що саме CUDA дозволила дослідникам винайти згорткові ядра, яких не існувало раніше, а TensorFlow на той час не існувало. **Насправді саме поєднання даних, обчислень і можливостей програмування дозволяє новим дослідженням запустити цілу хвилю систем глибокого навчання. **
**Тому дуже важливо вчитися на минулих подіях та історії. Отже, як зробити наступний крок? Як ми перейдемо до наступної ери цієї технології, де кожен зможе отримати користь від дивовижних алгоритмічних інновацій та ідей людства? **Як отримати користь від компілятора? Як ви можете використовувати масштаб і універсальність компіляторів для вирішення нових проблем? **Найважливіше, яку користь ви отримуєте від можливості програмування? Це Modular, над яким ми працюємо, — механізм штучного інтелекту. **
Про майбутнє штучного інтелекту
**Як ви бачите майбутнє розвитку штучного інтелекту? Як ви думаєте, чи буде більше співпраці між командами з різними профілями чи напрямками? Чи є однією з ваших цілей полегшити використання компілятора для експертів, які не займаються компіляцією? **
**Кріс Латтнер: **Люди дивовижні, але ніхто не може вкласти все в свою власну голову. **Люди різних типів і спеціальностей, працюючи разом, можуть створити щось більше, ніж усі інші. Наприклад, наприклад, я маю деякі здібності , але я взагалі не пам’ятаю жодних диференціальних рівнянь, чи не так? Тож наступним винахідником архітектури LLM точно буду не я (сміється).
**Але якщо я подумаю про це з системної точки зору, якщо я зможу залучити цих людей до участі, співпраці та розуміння того, як ці речі працюють, станеться прорив. **Як просувати винахід? Як залучити до співпраці більше людей, які розуміють різні аспекти проблеми? **Отже, дослідження Mojo та двигуна є спробою усунути складність проблеми. Оскільки є багато вже побудованих систем, які просто агрегуються разом. **
Рішення тут зазвичай базуються лише на розв’язанні проблеми, а не розроблені зверху вниз. І я думаю, що Modular забезпечує простіший стек, який може допомогти зменшити складність усього стеку. Якщо його не рефакторингувати, він усе одно буде йти за фрагментованою та хаотичною історією* (фрагментація у сфері штучного інтелекту)* Як тільки ви захочете трохи змінивши його, виникне збій, продуктивність буде жахливою, або він не працюватиме Ця ситуація виникає через фрагментацію нижнього шару.
**Як зрозуміти компілятори: чи є компілятори та мови середовищем для людської співпраці чи кросовером? **
Кріс Латтнер: Я створив Modular не для того, щоб шукати цвяхи за допомогою молотка, ані для інновацій заради інновацій. Зараз для таких компаній, як OpenAI, невеликій кількості працівників потрібно витрачати багато часу на написання CUDA вручну ядра. **Однак оптимізацію для компіляторів штучного інтелекту можна використовувати для покращення співпраці програмного забезпечення та розширення можливостей людей з різними навичками та знаннями. **
Остаточна форма компілятора полягає в тому, щоб дозволити користувачам виконувати будь-які завдання та вирішувати проблеми за допомогою дуже простого асемблерного коду, не знаючи багато про апаратне забезпечення.Справжня роль компілятора полягає в тому, щоб мати можливість виконувати завдання на вищому рівні абстракції Експрес. Компілятори також є способом належної автоматизації типових оптимізацій, які в іншому випадку можуть вимагати ручного програмування.
Перша мета — зробити процес максимально спрощеним;
Друга мета полягає в тому, що якщо ви викинете зі свого розуму багато складності, ви зможете звільнити місце для нової складності. Крім того, за допомогою абстракції ви можете скористатися перевагами компілятора, оскільки компілятор має безмежну увагу до деталей, а люди — ні;
**Вищі рівні абстракції також можуть дати нам багато інших можливостей. **Системи глибокого навчання та Modular підняли обчислення до графічного рівня. Як це пояснити? Тут це означає, що коли ви звільняєтеся від складних програмних операторів, таких як цикли for, і стаєте більш декларативними, це означає зміну моделі обчислень. Багато людей ще не усвідомлюють цього, але я думаю, що це можливо. Оскільки існуюча система легко викликає головний біль, багато функцій, які надає абстракція, призначені для реалізації Pmap і Vmap (Примітка: ці дві функції включають автоматичне виведення та розпаралелювання)
Удосконалення технології виграло завдяки великій кількості добре структурованих і добре структурованих систем, великій кількості нових високопродуктивних обчислювальних апаратних засобів і великій кількості зроблених проривів.** Тому я дуже сподіваюся, що Modular може бути більш широким застосуванням і популярністю, порушуючи складність серії, це чудово. **
(Примітка. Найбільша різниця між декларативним програмуванням і звичайним програмуванням полягає в тому, що існує додаткова концепція часу. Ви можете визначати минуле, теперішнє та майбутнє, замість того, щоб підтримувати односторонній час усього посилання на виконання. За допомогою концепції часу , зміст визначення можна спростити, і тоді граф обчислення можна отримати за допомогою "дедукції", замість того, щоб писати оператор тут і оператор там, і складати разом статичний графік)
**Чи можете ви дати визначення механізму штучного інтелекту Modular, структурі штучного інтелекту та компілятору штучного інтелекту? **
Кріс Латтнер: Більшість людей використовуватимуть такі інструменти, як PyTorch, під час навчання великих моделей. За такого сценарію незабаром буде представлено CUDA або Intel MKL. Я називаю ці типи движків спільно, і згадую, що до движка це головним чином відноситься до апаратного інтерфейсу, а Modular надає новий механізм, який може представити TensorFlow, PyTorch та інші. Тоді користувачі можуть управляти операціями та виконувати апаратне програмування по-новому, на основі правильної абстракції. , ви можете створювати круті реалізації.
**Згідно з вашим визначенням, Modular базується між рівнем каркаса та апаратним рівнем. Тоді ми хочемо знати петафлопс (кількість операцій із плаваючою комою, які можна виконати за секунду) Modular на A100, але я виявив, що весь веб-сайт працює з центральним процесором, і я не бачу графічного процесора. Тож моє запитання: усі наполегливо працюють над тим, щоб зробити графічний процесор швидшим, то чому ви хочете спочатку змусити ЦП працювати? **
Кріс Латтнер: Виходячи з перших принципів, ми маємо починати знизу. Як ви визначаєте сучасні системи штучного інтелекту? Багато хто щодня говорить про GPU і сперечається про GPU, здається, що все пов'язано з GPU. Проте насправді штучний інтелект — це масштабна гетерогенна паралельна обчислювальна проблема. Таким чином, традиційний штучний інтелект починається із завантаження даних, а графічний процесор не завантажує дані, тому ви повинні виконати низку завдань, таких як завантаження даних, попередня обробка та створення мережі, а також велику кількість матричних обчислень.
Для керування графічним процесором обов’язково потрібен центральний процесор. Коли ми розробляємо програмне забезпечення для Accelerator, ми побачимо, що існують різні проблеми, і те, що розробники вважають важливим, є важливою частиною проблеми, яку вони хочуть вирішити. Отже, кожен побудував систему на основі проблеми, і її потрібно було повністю спроектувати відповідно до вимог чіпа. **
**З технічної точки зору Modular хоче створити універсальний компілятор, оскільки легко перейти від універсального до вертикального, але мій досвід роботи з XLA показує, що неможливо почати з чогось спеціалізованого, а потім узагальнити це. . **
Для індустрії штучного інтелекту шкала навчання прямо пропорційна розміру дослідницької групи, тоді як шкала висновків прямо пропорційна масштабу продукту, базі користувачів тощо. **Тому багато висновків все ще робиться на ЦП. Тому ми вирішили почати з ЦП і спершу вдосконалити архітектуру. ЦП легше використовувати, і він не буде недоступним. Після завершення загальної архітектури ми зможемо продовжувати розширення. Зараз ми також працюємо над графічними процесорами, які буде запущено незабаром, і з часом буде розширено до цих різних типів прискорювачів. **
**Які технічні труднощі виникають при створенні двигуна? **
Кріс Латтнер: Члени нашої команди практично стикалися з усіма компіляторами та пов’язаними організаціями в галузі. Наприклад, я брав участь у дослідженні XLA та TensorFlow, а також є члени з PyTorch, TVM, Intel OpenVINO і Onyx Runtime Проблема для всіх полягає в тому, що багато систем було розроблено п’ять-вісім років тому. Штучний інтелект у той час відрізнявся від сучасного, не було великої мовної моделі.
**Проблема полягає в тому, що коли ви створюєте систему, вона починається як купа коду, а потім стає все більшою, більшою, більшою. І чим швидше розвивається система, тим важче внести фундаментальні зміни. Тому ми вирішили повторити все з нуля. **
Якщо ви все ще бажаєте мати можливість написати ядро вручну, ми спочатку створимо його прототип на C++, а потім поступово запровадимо mojo, що означає, що ви зможете створити дуже складний автоматичний компілятор, який застосовує всі найпередовіші технології, а також перевершує найдосконаліші.Технологія.
Ми знаємо, що користувачі ненавидять обмеження статичної форми та відсутність можливості програмування. Наприклад, вони не хочуть бути прив’язаними лише до Tensor* (Примітка: Tensor насправді є багатовимірним масивом, призначеним для створення високовимірних матриць і векторів. Багато великих моделей мають нерегулярні Tensors)*
**Чи є якісь цілі дизайну для Modular? Або принцип? **
Кріс Латтнер: Я не знаю, чи є у мене систематичний набір принципів. Звучить так, ніби мати набір принципів схоже на те, що тримати молоток і бачити, що все — це цвях. **Але багато з того, що нам потрібно зробити, це розкрити потенціал апаратного забезпечення та зробити це надзвичайно простим у використанні способом. Отже, багато початкових умов стосуються не так створення нових речей, а більше вирішення складних проблем під час виконання завдань, тому це більше схоже на проектування та розробку. **
Якщо ви поспілкуєтеся з компанією LLM, то легко дізнаєтеся, що вони витратили понад 200 мільйонів доларів США на GPU та GPU A100 певного розміру пам’яті.**Кожен хоче отримати всі можливості через GPU (обчислювальна потужність). З одного боку, є багато людей, які хочуть проникнути всередину чіпа та розкрити потенціал, але є багато інших, які хочуть більше мобільності, загальності та абстракції. **
Таким чином, проблема полягає в тому, як увімкнути та спроектувати систему для досягнення абстракції за замовчуванням, не відмовляючись від усіх функцій. Так само багато компіляторів, особливо компілятори машинного навчання, в основному просто намагаються охопити певну точку в просторі, і їхні функції не є універсальними.
Інша справа, що ми дбаємо про користувачів, тому що багато людей одержимі технологіями, але забувають, що портрети людей, які застосовують технології, і тих, хто створює технології, абсолютно різні.Нам потрібно розуміти ідеї розробників, які використовують інструменти.
**За останні кілька днів було випущено Modular для завантаження та використання на базі Linux Mojo. Версії для MacOS і Windows будуть випущені найближчим часом. Отже, які інші набори інструментів і компоненти будуть доступні через наступні шість-дев’ять місяців? **
**Кріс Латтнер:**Моджо все ще молода мова, і ми будемо поступово працювати з екосистемою, щоб зробити її все більш зрілою. Ми хочемо створити велику спільноту навколо Mojo, щоб разом створювати цікаві речі. Щоб досягти цієї мети, ми поступово відкриватимемо вихідний код Mojo, і всі повинні працювати разом, щоб вирішити багато деталей, щоб побудувати добре функціонуючу екосистему, а не просто безлад.
Подібно до катастрофи Python 2-3, яку всі пережили, ніхто не хоче згадувати про це* (Примітка: більше 80% двох синтаксисів несумісні, і через історичні проблеми багато дистрибутивів Linux покладаються на py2 у нижній частині, але користувач випадково використав py3, і pip install xxx призвело до збою системи). *
**З: Які у вас стосунки з Гвідо (*****Примітка: голландський інженер Гвідован Россум, який винайшов мову Python) і Python Foundation? Як вони пов'язані між собою? **
Кріс Латтнер: Гвідо знав, що Моджо приїде, і Гвідо провів багато часу з нашою командою, і нам дуже пощастило. Він час від часу з’являється в спільноті mojo Discord і ставить мені складні запитання, що чудово.
Ми вважаємо, що mojo є членом сімейства Python. Звичайно, є багато членів сімейства Python, включаючи PyPy і Cython тощо. Ми сподіваємося, що Python зможе продовжувати розвиватися та продовжувати додавати новий вміст. Mojo також продовжує розвиватися та додавати новий вміст.
Поверніться на 30 або 40 років тому, коли була мова C, а потім у 1983 році з’явилася нова річ під назвою C++. C++ насправді є мовою C із класами (Примітка: у 1979 році Б’яме Сгоуструп пішов у Bell Labs і почали перетворювати C на мову з класами. У 1983 році мова була офіційно названа C++)
У той час C і C++ починалися як дві різні спільноти, але між ними було багато зближення, обміну ідеями.
Звісно, усі функції мови C зрештою були інтегровані в C++. Тому я сподіваюся, що те саме станеться з Mojo та Python.
Про підприємництво та інженерну команду
**Було багато таких засновників, як ви, які мали довгу дивовижну кар’єру інженерів. Раптом це генеральний директор. Отже, що ви дізналися про створення команд і навчання інших? Особливо після того, як ви стали інженером, тепер ви також повинні бути лідером продукту та відповідальним за фінансування. Що ви думаєте? **
**Кріс Латтнер:**У Modular ми з моїм співзасновником Тімом дуже тісно співпрацюємо та взаємодоповнюємо один одного. У процесі відкриття бізнесу мати з ким поговорити дуже, дуже важливо. Те, що я зараз відчуваю, — це те, чого я ніколи не відчував як керівник інженерів Google і Apple.
**Коли ми засновували цю компанію, ми вірили в те, що зрозумійте біль. Представлення великої компанії відрізняється від представництва компанії-початківця. Коли компанія-початківець буде фактично створена, я стану керівником інженерів і почну формувати команду інженерів, а Тім відповідатиме за роботу з продуктом і бізнесом, а також відповідатиме за роботу за відсутності великої компанії Спілкуйтеся з різними компаніями (замовниками) під аурою фабрики. Наприклад, які ваші зараз больові точки? **
Над чим ви зараз працюєте? Які проблеми? Як ми можемо допомогти? Що ви думаєте про те, що ми робимо? Проблема, яка постає перед нами як модульна, полягає в тому, що те, що ми хочемо створити, є надзвичайно складною та дуже абстрактною технічною проблемою.
**Для вирішення цих складних проблем потрібно найняти дуже дорогих технічних експертів з усіх великих технологічних компаній. Тому я повинен зібрати багато коштів, добре мотивувати працівників, платити їм зарплату та зробити так, щоб працівники почувалися комфортно. **
Ми безпосередньо стикаємося з клієнтами та бачимо біль клієнтів у сфері інтелекту ШІ. Створення та розгортання багатьох речей справді безлад, і всі потрапляють у пастку занадто великої кількості неефективних речей. Тому наше бачення полягає в тому, щоб об’єднати всі ці речі з Modular.
Але проблема виникає знову: під час розробки продуктів продукти також постійно змінюються, і потреби продовжуватимуть змінюватися з часом. Отже, те, з чим ми працювали, закінчилося дуже високим рівнем складності, з великою кількістю різних брудних систем, розроблених для різних особливих випадків.
**Досвід інженерного лідера: Великий досвід створення команд і найму інженерів. У вас є досвід чи пропозиції щодо управління проектами? **
Кріс Латтнер: Моя робота полягає в тому, щоб допомогти команді перемагати. Ви повинні визначити, що таке перемога, дати людям чітке бачення, чітку мету та тримати всіх узгодженими. **Коли у вас є велика група дуже хороших люди навколо вас Коли кожен хоче бути героєм, чітка мета дуже важлива. Коли потенційна енергія накладається, великий прогрес буде досягнутий швидко, але коли вона змінюється, імпульс буде зміщений. **
Внутрішньо я часто особисто беру участь у створенні початкової інфраструктури, і важливо показати команді, як це буде працювати, і це є частиною нашої культури. Найважливіше для мене в команді інженерів — швидкість впровадження, якщо ви чекаєте 24 години або три тижні, щоб запустити CI, все сповільниться.
Коли ви приймаєте на роботу та продовжуєте розвивати своїх співробітників, ви також хочете визначити, у чому вони хороші, чи не так? Я справді вірю, що якщо у вас є дійсно хороша, справді захоплена команда людей, і ви об’єднуєте їх із чимось, що вони справді хочуть робити, у них є надздібності.
Тому часто ми хочемо переконатися, що люди вирішують правильні проблеми. Таким чином вони можуть рости, робити щось, штовхати та приймати рішення самостійно. Але часто люди будуть дуже зосереджені на продукті, або деякі особливо добре вміють вести бізнес, зосереджуючись на клієнтах і проблемах, з якими клієнти стикаються. Але ви не можете вирішити та створити продукт без команди.
**Мені дуже подобається Тім, тому що він справді хороший у сферах, у яких я не дуже вмію, і всі вчаться один в одного. **
Про ChatGPT і штучний інтелект
Спалах ChatGPT надзвичайно цікавий. Для таких людей, як ми, які протягом тривалого часу звертали увагу на штучний інтелект, ChatGPT означає своєрідну інновацію в інтерфейсі користувача та дозволяє людям усвідомити силу штучного інтелекту. Озираючись назад, я думаю, що це підвищило популярність штучного інтелекту в суспільній свідомості на кілька років.
**Яка найцікавіша нерозгадана загадка у сфері штучного інтелекту? **
Кріс Латтнер: Я думаю, що штучний інтелект зараз у підлітковому віці. Є багато розумних людей з різними уявленнями про те, що таке ШІ, чи не так? Деякі люди вважають, що все має бути наскрізними нейронними мережами, а програмне забезпечення має зникнути. Я думаю, що потрібно відповісти на запитання, який баланс між навчальними алгоритмами та алгоритмами інтелектуального проектування? Особисто я не думаю, що це все те чи інше, якщо ви хочете створити детектор котів, тоді CNN справді є хорошим способом це зробити. Якщо ви хочете написати завантажувач або операційну систему, реалізація її за допомогою циклу for працює просто чудово. **Але де з часом ці речі будуть припинені? Як ми можемо змусити розробників додатків більш послідовно думати про ці презентації? **
**Ми сподіваємося на майбутнє, що штучний інтелект з часом стане частиною набору інструментів для того, як люди думають про те, як створювати програми як методологію розробки програмного забезпечення. Не лише додатки для iPhone чи подібні форми, але й весь хмарний сервіс, конвеєр даних і, зрештою, ітераційна конструкція всього продукту користувача.Звичайно, ми все ще на шляху дослідження. **
*ДякуюEvolution of Technology Life** усім моїм друзям за їхню підтримку автора протягом багатьох років, а також дякую ChaosAI**
*Дякуємо Dakai, AsyncGreed, Zhang Bo, Mao Li, Ethan і Mew за професійну допомогу
довідка:
1.
2. Довідка: Що таке ІВ в індустрії чіпів? -Xin Analects-Небо високе, а хмари темні Andi863
3. Домашня сторінка Кріса Латтнера (nondot.org)
4.nn.functional і nn.Module- Liang Yun 1991 Algorithm Food House 2020-07-10 21:47
5. Довідка: Jianshu, 12 серпня 2018 р. Просте пояснення, яке допоможе вам зрозуміти, що таке LLVM
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Детальне пояснення Modular: як батько LLVM створює майбутню мову механізму ШІ?
Структура цієї статті
**1.Що таке компілятор? **
2. Про Кріса Латтнера, батька LLVM
3.Про Modular
4. Про підприємництво, формування команди інженерів і майбутнє ШІ
**1. Що таке компілятор? **
Компілятор — це програмний інструмент, який перетворює мови програмування високого рівня у виконуваний комп’ютером код. Компілятор перетворює вихідний код, написаний програмістом, у двійкові інструкції, які комп’ютер може зрозуміти та виконати. Ці інструкції упаковуються у виконуваний файл або бібліотеку для запуску програм на комп’ютері.
Основним робочим процесом компілятора є вихідний код → препроцесор → компілятор → об’єктний код → компонувальник → виконувані програми (utables)
Ще один яскравий приклад:
*Вчитель: Діти, сьогодні ми вчимо додавання. *
бла-бла-бла ……
*Діти: Вчителю, ми навчилися. *
Вчитель: Тепер ви можете зрозуміти 1+1=? Компілятор
2. Кріс Латтнер, батько LLVM
Перш ніж говорити про Modular, давайте спершу поговоримо про досвід Кріса Латтнера. Він народився в Каліфорнії в 1978 році та виріс у районі затоки Сан-Франциско. Він почав програмувати, коли був дуже молодим. Пізніше він отримав ступінь бакалавра в інформатики в Каліфорнійському університеті в Берклі та навчався на докторську дисертацію в Стенфордському університеті, зосереджуючись на оптимізації компілятора та автоматичному розпаралелюванні.
Кріс Латтнер очолював розробку LLVM під час свого доктора філософії. Завдяки LLVM він отримав нагороду ACM Software Award 2012** (ACM Software Award)****. Після цього Латтне був прийнятий на роботу в Apple і відповідав за багато важливих проектів в Apple, включаючи дизайн і розробку інтерфейсу компілятора Clang, мови програмування Swift (мова, яка замінила Objective-C) і вдосконалення середовища розробки Xcode. Мова Swift широко популярна завдяки своїй простоті та продуктивності і використовується розробниками для розробки програм на iOS, macOS та інших платформах Apple.
Після відходу з Apple Кріс Латтнер працював у таких компаніях, як Tesla та Google, і продовжував публікувати дослідницькі статті та брати участь у проектах з відкритим кодом у сфері мов програмування та технологій компілятора.Він відповідав за керівництво командою інфраструктури Tensorflow. у Google. створив XLA та MLIR.
Тут ми пояснюємо, що таке XLA та MLIR:
XLA (Accelerated Linear Algebra) — компілятор лінійної алгебри, орієнтований на предметну область, який може пришвидшити моделі TensorFlow, потенційно не вимагаючи жодних змін у вихідному коді. Це може **** покращити швидкість бігу та покращити використання пам’яті. ***
***MLIR (Багаторівневе проміжне представлення:Багаторівневе проміжне представлення) — це структура компілятора. Його дизайн оптимізує компілятор і в основному охоплює всі загальні частини дизайну компілятора. , що значною мірою полегшує розробникам компіляторів. *
**Що більш важливо, що таке LLVM? **(Нижче подано уривок із короткої книги, оригінальний текст дивіться за посиланням)
**LLVM можна розуміти як набір модульних багаторазових компіляторів і технологій ланцюга інструментів. LLVM (насправді повна назва Low Level Virtue Machine, але вона ніколи не використовувалася як віртуальна машина) Отже, наступна LLVM не є акронімом; це повна назва проекту.
Потім ми продовжуємо: Традиційна архітектура компілятора виглядає так:
Розібраний, він включає:
Архітектура LLVM виглядає так
**Щоб описати це точно, LLVM вніс багато інновацій у компілятор, наприклад: **
**Що таке Clang? **
Підпроект проекту LLVM, інтерфейс компілятора C/C++/Objective-C на основі архітектури LLVM. У порівнянні з GCC Clang має наступні переваги
Відносини між Clang і LLVM
Для загальної архітектури LLVM clang використовується як інтерфейс. LLVM у широкому сенсі відноситься до всієї архітектури LLVM, а LLVM у загальному вузькому значенні відноситься до серверної частини LLVM (включаючи оптимізацію коду та генерацію цільового коду).
Вихідний код (c/c++) проходить через clang--> проміжний код (після серії оптимізацій для оптимізації використовується Pass) --> машинний код
Довідка: Jianshu-12 серпня 2018 р.-Просте пояснення, яке допоможе вам зрозуміти, що таке LLVM
3. Про Modular
Модульний ——система штучного інтелекту
C****hris Lattner: «Я створив Modular не за допомогою молотка, який шукає цвяхи, і не за допомогою інновацій заради інновацій. Наразі для таких компаній, як OpenAI, невеликій кількості працівників потрібно багато витрачати часу на написання ядер CUDA вручну. Проте оптимізацію для компіляторів AI можна використовувати для покращення співпраці програмного забезпечення та розширення можливостей людей з різними навичками та знаннями"
**"Остаточна форма компілятора полягає в тому, щоб дозволити користувачам використовувати дуже простий асемблерний код для виконання будь-яких завдань і вирішення проблем, не знаючи багато про апаратне забезпечення. Справжня роль компілятора полягає у використанні вищого рівня абстракцій для вираження. **"
*"*FasterTransformer, запущений NVIDIA, може значно підвищити продуктивність. Тому багато великих модельних компаній і розробників використовують FasterTransformer. Однак, якщо ви хочете впроваджувати інновації в області Transformer, FasterTransformer вас обмежить."
C****hris Lattner: Якщо ви хочете отримати ті самі або кращі результати, що й FasterTransformer, але використовуючи інші загальні архітектури (тут архітектури, які не є Transformer), тоді за допомогою компілятора ви можете отримати найкраще з обох worlds У результаті під час дослідження можна отримати таку ж чудову продуктивність.Іншими словами, оптимізація на рівні компілятора може бути еквівалентною «двигуну ШІ» та допомогти у трансформації архітектури LLM у майбутньому.
Кріс Латтнер: Якщо ми повернемося до 2015, 2016 і 2017 років, періоду бурхливого розвитку штучного інтелекту, технологія тієї епохи в основному очолювалася TensorFlow і PyTorch. PyTorch з’явився трохи пізніше TensorFlow. , але вони обидва є схожими дизайнами в деяких аспектах. **Однак люди, які створюють і проектують системи TensorFlow і PyTorch, в основному мають досвід роботи зі штучним інтелектом, диференціальними рівняннями та автоматичним диференціюванням. Вони не вирішили граничну проблему програмного та апаратного забезпечення. **
Отже, потрібен Keras* (Примітка: Keras — це бібліотека штучної нейронної мережі з відкритим вихідним кодом, написана мовою Python. Її можна використовувати як інтерфейс прикладного програмування високого рівня для Tensorflow, Microsoft-CNTK і Theano для створювати моделі глибокого навчання Дизайн, налагодження, оцінка, застосування та візуалізація ) або nn.Module (Примітка: nn.Module * — це концепція, унікальна для PyTorch, а також клас, який часто використовується*)*.
Нижній рівень цих речей - це фактично оператори.Як реалізувати згортку, множення матриці, алгоритм редукції та поелементну операцію? Вам потрібно використовувати CUDA та Intel MKL (Intel Math Kernel Library), а потім продовжувати будувати на цих засадах.
На початку ця модель є нормальною, але проблема також існує. Спочатку дуже мало операторів. Однак, поки з’являється нове апаратне забезпечення, навіть якщо це лише новий варіант процесора, представлений Intel, обчислювальна складність буде продовжують зростати. Сьогодні TensorFlow і PyTorch мають тисячі операторів, кожен з яких називається ядром, і всі ядра мають бути написані людьми вручну.
(Примітка: IP у промисловості чіпів зазвичай також називають IP-ядром. IP-ядро стосується розробленої конструкції схемних модулів із незалежними функціями в чіпі. Цю схему схемного модуля можна застосувати до інших чіпів, які містять цей схемний модуль. проекту, тим самим зменшуючи робоче навантаження на проектування, скорочуючи цикл проектування та покращуючи рівень успішності проектування чіпа. Зрілий дизайн цього схемного модуля втілює в собі мудрість дизайнера та відображає права інтелектуальної власності розробника. Тому індустрія чіпів використовує ядра IP для Вказує на зрілу конструкцію цього схемного модуля. IP-ядро також можна розуміти як проміжний компонент конструкції мікросхеми)
Іншими словами, після запуску нового апаратного забезпечення вам доведеться переписати тисячі ядер, тому поріг для входу в апаратне забезпечення буде ставати все вищим і вищим. Більш того, ця ситуація також створює багато труднощів для наукових досліджень. Наприклад, дослідник, дуже мало хто знає, як працюють ці ядра.
(Примітка: оскільки розробка ядра часто стосується апаратних платформ, навіть nvidia не є універсальною, не кажучи вже про FPGA або DPU. Спеціальні оператори є основним каналом для розширення обчислювальних можливостей програмного забезпечення апаратної платформи)
Ви також повинні знати, що зараз багато людей пишуть CUDA Kernel* (Примітка: Kernel: назва функції, яку запускає CUDA на GPU)*, але профіль навичок інженерів тут повністю відрізняється від навичок, які можуть інновувати архітектура моделі. **У результаті багато систем штучного інтелекту стикаються з такою проблемою: вони не можуть знайти технічних експертів, які можуть написати ядро. **
*(Примітка: *У разі використання графічного процесора для обчислення всі процеси обчислення можуть бути інкапсульовані в ядро графічного процесора та виконуватися на графічному процесорі послідовно. Задля універсальності традиційні бібліотеки операторів будуть використовуватися. Дизайн дуже простий, тому їх багато)
Про Google TPU
Коли я працював у Google, я брав участь у проекті Google TPU. У той час команда TPU мала такі проблеми: на ринку тисячі різних ядер, як запустити нове обладнання? У той час багато колег також згадували, чи можна використати компілятор для цього. **Отже, замість того, щоб вручну писати тисячі ядер, переписувати всі ці оператори та повністю створювати власну екосистему, як Intel або NVIDIA, компілятор може бути більш гнучким, ніж ручний, оскільки компілятор може дозволити нам робити це різними способами. і відповідне ядро також може оптимізувати багато продуктивності. **
**Компілятори можуть досягти цього узагальненим способом, але якщо ми використовуємо традиційне ядро, написане від руки, виходить фіксоване розташування ядер, яке люди вважають цікавим, а не щось нове, що хочеться дослідникам. **Так народилася XLA від Google (Пояснено вище: Accelerated Linear Algebra: Accelerated Linear Algebra). XLA може підтримувати великі комп’ютери рівня exaflop, але проблема виникає знову: XLA з’явився для підтримки TPU Google.
**Створити компілятор справді важко, і все ще існують проблеми з масштабованістю. Наразі інженерів-компіляторів потрібно наймати для виконання багатьох інженерних проектів машинного навчання, а інженери-компілятори, які розуміються на машинному навчанні та різноманітних пов’язаних знаннях, є навіть важливішими. достатньо. Крім того, XLA не масштабується і працює лише з TPU. **
Про глибоке навчання та програмування
Якщо ми поглянемо назад на історію розвитку NVIDIA CUDA та глибокого навчання, наприклад народження AlexNet і розвиток глибокого навчання, багато людей вважають, що народження AlexNet є результатом поєднання даних, ImageNet + обчислення та потужність GPU. **
(Примітка: у 2012 році Алекс Крижевський та Ілля, учні Джеффрі Хінтона, одного з трьох гігантів глибокого навчання та лауреата премії Тюрінга, запропонували AlexNet і виграли чемпіонат зі значною перевагою в ILSVRC того року, значно перевищивши третій 2. Цей результат привернув велику увагу наукових кіл та промисловості, і комп’ютерне зір поступово вступило в еру, де домінує глибоке навчання)
**Але багато людей забувають про важливість «програмованості». **
Тому що саме CUDA дозволила дослідникам винайти згорткові ядра, яких не існувало раніше, а TensorFlow на той час не існувало. **Насправді саме поєднання даних, обчислень і можливостей програмування дозволяє новим дослідженням запустити цілу хвилю систем глибокого навчання. **
**Тому дуже важливо вчитися на минулих подіях та історії. Отже, як зробити наступний крок? Як ми перейдемо до наступної ери цієї технології, де кожен зможе отримати користь від дивовижних алгоритмічних інновацій та ідей людства? **Як отримати користь від компілятора? Як ви можете використовувати масштаб і універсальність компіляторів для вирішення нових проблем? **Найважливіше, яку користь ви отримуєте від можливості програмування? Це Modular, над яким ми працюємо, — механізм штучного інтелекту. **
Про майбутнє штучного інтелекту
**Кріс Латтнер: **Люди дивовижні, але ніхто не може вкласти все в свою власну голову. **Люди різних типів і спеціальностей, працюючи разом, можуть створити щось більше, ніж усі інші. Наприклад, наприклад, я маю деякі здібності , але я взагалі не пам’ятаю жодних диференціальних рівнянь, чи не так? Тож наступним винахідником архітектури LLM точно буду не я (сміється).
**Але якщо я подумаю про це з системної точки зору, якщо я зможу залучити цих людей до участі, співпраці та розуміння того, як ці речі працюють, станеться прорив. **Як просувати винахід? Як залучити до співпраці більше людей, які розуміють різні аспекти проблеми? **Отже, дослідження Mojo та двигуна є спробою усунути складність проблеми. Оскільки є багато вже побудованих систем, які просто агрегуються разом. **
Рішення тут зазвичай базуються лише на розв’язанні проблеми, а не розроблені зверху вниз. І я думаю, що Modular забезпечує простіший стек, який може допомогти зменшити складність усього стеку. Якщо його не рефакторингувати, він усе одно буде йти за фрагментованою та хаотичною історією* (фрагментація у сфері штучного інтелекту)* Як тільки ви захочете трохи змінивши його, виникне збій, продуктивність буде жахливою, або він не працюватиме Ця ситуація виникає через фрагментацію нижнього шару.
Кріс Латтнер: Я створив Modular не для того, щоб шукати цвяхи за допомогою молотка, ані для інновацій заради інновацій. Зараз для таких компаній, як OpenAI, невеликій кількості працівників потрібно витрачати багато часу на написання CUDA вручну ядра. **Однак оптимізацію для компіляторів штучного інтелекту можна використовувати для покращення співпраці програмного забезпечення та розширення можливостей людей з різними навичками та знаннями. **
Остаточна форма компілятора полягає в тому, щоб дозволити користувачам виконувати будь-які завдання та вирішувати проблеми за допомогою дуже простого асемблерного коду, не знаючи багато про апаратне забезпечення.Справжня роль компілятора полягає в тому, щоб мати можливість виконувати завдання на вищому рівні абстракції Експрес. Компілятори також є способом належної автоматизації типових оптимізацій, які в іншому випадку можуть вимагати ручного програмування.
Перша мета — зробити процес максимально спрощеним;
Друга мета полягає в тому, що якщо ви викинете зі свого розуму багато складності, ви зможете звільнити місце для нової складності. Крім того, за допомогою абстракції ви можете скористатися перевагами компілятора, оскільки компілятор має безмежну увагу до деталей, а люди — ні;
**Вищі рівні абстракції також можуть дати нам багато інших можливостей. **Системи глибокого навчання та Modular підняли обчислення до графічного рівня. Як це пояснити? Тут це означає, що коли ви звільняєтеся від складних програмних операторів, таких як цикли for, і стаєте більш декларативними, це означає зміну моделі обчислень. Багато людей ще не усвідомлюють цього, але я думаю, що це можливо. Оскільки існуюча система легко викликає головний біль, багато функцій, які надає абстракція, призначені для реалізації Pmap і Vmap (Примітка: ці дві функції включають автоматичне виведення та розпаралелювання)
Удосконалення технології виграло завдяки великій кількості добре структурованих і добре структурованих систем, великій кількості нових високопродуктивних обчислювальних апаратних засобів і великій кількості зроблених проривів.** Тому я дуже сподіваюся, що Modular може бути більш широким застосуванням і популярністю, порушуючи складність серії, це чудово. **
(Примітка. Найбільша різниця між декларативним програмуванням і звичайним програмуванням полягає в тому, що існує додаткова концепція часу. Ви можете визначати минуле, теперішнє та майбутнє, замість того, щоб підтримувати односторонній час усього посилання на виконання. За допомогою концепції часу , зміст визначення можна спростити, і тоді граф обчислення можна отримати за допомогою "дедукції", замість того, щоб писати оператор тут і оператор там, і складати разом статичний графік)
Кріс Латтнер: Більшість людей використовуватимуть такі інструменти, як PyTorch, під час навчання великих моделей. За такого сценарію незабаром буде представлено CUDA або Intel MKL. Я називаю ці типи движків спільно, і згадую, що до движка це головним чином відноситься до апаратного інтерфейсу, а Modular надає новий механізм, який може представити TensorFlow, PyTorch та інші. Тоді користувачі можуть управляти операціями та виконувати апаратне програмування по-новому, на основі правильної абстракції. , ви можете створювати круті реалізації.
Кріс Латтнер: Виходячи з перших принципів, ми маємо починати знизу. Як ви визначаєте сучасні системи штучного інтелекту? Багато хто щодня говорить про GPU і сперечається про GPU, здається, що все пов'язано з GPU. Проте насправді штучний інтелект — це масштабна гетерогенна паралельна обчислювальна проблема. Таким чином, традиційний штучний інтелект починається із завантаження даних, а графічний процесор не завантажує дані, тому ви повинні виконати низку завдань, таких як завантаження даних, попередня обробка та створення мережі, а також велику кількість матричних обчислень.
Для керування графічним процесором обов’язково потрібен центральний процесор. Коли ми розробляємо програмне забезпечення для Accelerator, ми побачимо, що існують різні проблеми, і те, що розробники вважають важливим, є важливою частиною проблеми, яку вони хочуть вирішити. Отже, кожен побудував систему на основі проблеми, і її потрібно було повністю спроектувати відповідно до вимог чіпа. **
**З технічної точки зору Modular хоче створити універсальний компілятор, оскільки легко перейти від універсального до вертикального, але мій досвід роботи з XLA показує, що неможливо почати з чогось спеціалізованого, а потім узагальнити це. . **
Для індустрії штучного інтелекту шкала навчання прямо пропорційна розміру дослідницької групи, тоді як шкала висновків прямо пропорційна масштабу продукту, базі користувачів тощо. **Тому багато висновків все ще робиться на ЦП. Тому ми вирішили почати з ЦП і спершу вдосконалити архітектуру. ЦП легше використовувати, і він не буде недоступним. Після завершення загальної архітектури ми зможемо продовжувати розширення. Зараз ми також працюємо над графічними процесорами, які буде запущено незабаром, і з часом буде розширено до цих різних типів прискорювачів. **
Кріс Латтнер: Члени нашої команди практично стикалися з усіма компіляторами та пов’язаними організаціями в галузі. Наприклад, я брав участь у дослідженні XLA та TensorFlow, а також є члени з PyTorch, TVM, Intel OpenVINO і Onyx Runtime Проблема для всіх полягає в тому, що багато систем було розроблено п’ять-вісім років тому. Штучний інтелект у той час відрізнявся від сучасного, не було великої мовної моделі.
**Проблема полягає в тому, що коли ви створюєте систему, вона починається як купа коду, а потім стає все більшою, більшою, більшою. І чим швидше розвивається система, тим важче внести фундаментальні зміни. Тому ми вирішили повторити все з нуля. **
Якщо ви все ще бажаєте мати можливість написати ядро вручну, ми спочатку створимо його прототип на C++, а потім поступово запровадимо mojo, що означає, що ви зможете створити дуже складний автоматичний компілятор, який застосовує всі найпередовіші технології, а також перевершує найдосконаліші.Технологія.
Ми знаємо, що користувачі ненавидять обмеження статичної форми та відсутність можливості програмування. Наприклад, вони не хочуть бути прив’язаними лише до Tensor* (Примітка: Tensor насправді є багатовимірним масивом, призначеним для створення високовимірних матриць і векторів. Багато великих моделей мають нерегулярні Tensors)*
Кріс Латтнер: Я не знаю, чи є у мене систематичний набір принципів. Звучить так, ніби мати набір принципів схоже на те, що тримати молоток і бачити, що все — це цвях. **Але багато з того, що нам потрібно зробити, це розкрити потенціал апаратного забезпечення та зробити це надзвичайно простим у використанні способом. Отже, багато початкових умов стосуються не так створення нових речей, а більше вирішення складних проблем під час виконання завдань, тому це більше схоже на проектування та розробку. **
Якщо ви поспілкуєтеся з компанією LLM, то легко дізнаєтеся, що вони витратили понад 200 мільйонів доларів США на GPU та GPU A100 певного розміру пам’яті.**Кожен хоче отримати всі можливості через GPU (обчислювальна потужність). З одного боку, є багато людей, які хочуть проникнути всередину чіпа та розкрити потенціал, але є багато інших, які хочуть більше мобільності, загальності та абстракції. **
Таким чином, проблема полягає в тому, як увімкнути та спроектувати систему для досягнення абстракції за замовчуванням, не відмовляючись від усіх функцій. Так само багато компіляторів, особливо компілятори машинного навчання, в основному просто намагаються охопити певну точку в просторі, і їхні функції не є універсальними.
Інша справа, що ми дбаємо про користувачів, тому що багато людей одержимі технологіями, але забувають, що портрети людей, які застосовують технології, і тих, хто створює технології, абсолютно різні.Нам потрібно розуміти ідеї розробників, які використовують інструменти.
**Кріс Латтнер:**Моджо все ще молода мова, і ми будемо поступово працювати з екосистемою, щоб зробити її все більш зрілою. Ми хочемо створити велику спільноту навколо Mojo, щоб разом створювати цікаві речі. Щоб досягти цієї мети, ми поступово відкриватимемо вихідний код Mojo, і всі повинні працювати разом, щоб вирішити багато деталей, щоб побудувати добре функціонуючу екосистему, а не просто безлад.
Подібно до катастрофи Python 2-3, яку всі пережили, ніхто не хоче згадувати про це* (Примітка: більше 80% двох синтаксисів несумісні, і через історичні проблеми багато дистрибутивів Linux покладаються на py2 у нижній частині, але користувач випадково використав py3, і pip install xxx призвело до збою системи). *
**З: Які у вас стосунки з Гвідо (*****Примітка: голландський інженер Гвідо ван Россум, який винайшов мову Python) і Python Foundation? Як вони пов'язані між собою? **
Кріс Латтнер: Гвідо знав, що Моджо приїде, і Гвідо провів багато часу з нашою командою, і нам дуже пощастило. Він час від часу з’являється в спільноті mojo Discord і ставить мені складні запитання, що чудово.
Ми вважаємо, що mojo є членом сімейства Python. Звичайно, є багато членів сімейства Python, включаючи PyPy і Cython тощо. Ми сподіваємося, що Python зможе продовжувати розвиватися та продовжувати додавати новий вміст. Mojo також продовжує розвиватися та додавати новий вміст.
Поверніться на 30 або 40 років тому, коли була мова C, а потім у 1983 році з’явилася нова річ під назвою C++. C++ насправді є мовою C із класами (Примітка: у 1979 році Б’яме Сгоуструп пішов у Bell Labs і почали перетворювати C на мову з класами. У 1983 році мова була офіційно названа C++)
У той час C і C++ починалися як дві різні спільноти, але між ними було багато зближення, обміну ідеями.
Звісно, усі функції мови C зрештою були інтегровані в C++. Тому я сподіваюся, що те саме станеться з Mojo та Python.
Про підприємництво та інженерну команду
**Кріс Латтнер:**У Modular ми з моїм співзасновником Тімом дуже тісно співпрацюємо та взаємодоповнюємо один одного. У процесі відкриття бізнесу мати з ким поговорити дуже, дуже важливо. Те, що я зараз відчуваю, — це те, чого я ніколи не відчував як керівник інженерів Google і Apple.
**Коли ми засновували цю компанію, ми вірили в те, що зрозумійте біль. Представлення великої компанії відрізняється від представництва компанії-початківця. Коли компанія-початківець буде фактично створена, я стану керівником інженерів і почну формувати команду інженерів, а Тім відповідатиме за роботу з продуктом і бізнесом, а також відповідатиме за роботу за відсутності великої компанії Спілкуйтеся з різними компаніями (замовниками) під аурою фабрики. Наприклад, які ваші зараз больові точки? **
Над чим ви зараз працюєте? Які проблеми? Як ми можемо допомогти? Що ви думаєте про те, що ми робимо? Проблема, яка постає перед нами як модульна, полягає в тому, що те, що ми хочемо створити, є надзвичайно складною та дуже абстрактною технічною проблемою.
**Для вирішення цих складних проблем потрібно найняти дуже дорогих технічних експертів з усіх великих технологічних компаній. Тому я повинен зібрати багато коштів, добре мотивувати працівників, платити їм зарплату та зробити так, щоб працівники почувалися комфортно. **
Ми безпосередньо стикаємося з клієнтами та бачимо біль клієнтів у сфері інтелекту ШІ. Створення та розгортання багатьох речей справді безлад, і всі потрапляють у пастку занадто великої кількості неефективних речей. Тому наше бачення полягає в тому, щоб об’єднати всі ці речі з Modular.
Але проблема виникає знову: під час розробки продуктів продукти також постійно змінюються, і потреби продовжуватимуть змінюватися з часом. Отже, те, з чим ми працювали, закінчилося дуже високим рівнем складності, з великою кількістю різних брудних систем, розроблених для різних особливих випадків.
Кріс Латтнер: Моя робота полягає в тому, щоб допомогти команді перемагати. Ви повинні визначити, що таке перемога, дати людям чітке бачення, чітку мету та тримати всіх узгодженими. **Коли у вас є велика група дуже хороших люди навколо вас Коли кожен хоче бути героєм, чітка мета дуже важлива. Коли потенційна енергія накладається, великий прогрес буде досягнутий швидко, але коли вона змінюється, імпульс буде зміщений. **
Внутрішньо я часто особисто беру участь у створенні початкової інфраструктури, і важливо показати команді, як це буде працювати, і це є частиною нашої культури. Найважливіше для мене в команді інженерів — швидкість впровадження, якщо ви чекаєте 24 години або три тижні, щоб запустити CI, все сповільниться.
Коли ви приймаєте на роботу та продовжуєте розвивати своїх співробітників, ви також хочете визначити, у чому вони хороші, чи не так? Я справді вірю, що якщо у вас є дійсно хороша, справді захоплена команда людей, і ви об’єднуєте їх із чимось, що вони справді хочуть робити, у них є надздібності.
Тому часто ми хочемо переконатися, що люди вирішують правильні проблеми. Таким чином вони можуть рости, робити щось, штовхати та приймати рішення самостійно. Але часто люди будуть дуже зосереджені на продукті, або деякі особливо добре вміють вести бізнес, зосереджуючись на клієнтах і проблемах, з якими клієнти стикаються. Але ви не можете вирішити та створити продукт без команди.
**Мені дуже подобається Тім, тому що він справді хороший у сферах, у яких я не дуже вмію, і всі вчаться один в одного. **
Про ChatGPT і штучний інтелект
Спалах ChatGPT надзвичайно цікавий. Для таких людей, як ми, які протягом тривалого часу звертали увагу на штучний інтелект, ChatGPT означає своєрідну інновацію в інтерфейсі користувача та дозволяє людям усвідомити силу штучного інтелекту. Озираючись назад, я думаю, що це підвищило популярність штучного інтелекту в суспільній свідомості на кілька років.
**Яка найцікавіша нерозгадана загадка у сфері штучного інтелекту? **
Кріс Латтнер: Я думаю, що штучний інтелект зараз у підлітковому віці. Є багато розумних людей з різними уявленнями про те, що таке ШІ, чи не так? Деякі люди вважають, що все має бути наскрізними нейронними мережами, а програмне забезпечення має зникнути. Я думаю, що потрібно відповісти на запитання, який баланс між навчальними алгоритмами та алгоритмами інтелектуального проектування? Особисто я не думаю, що це все те чи інше, якщо ви хочете створити детектор котів, тоді CNN справді є хорошим способом це зробити. Якщо ви хочете написати завантажувач або операційну систему, реалізація її за допомогою циклу for працює просто чудово. **Але де з часом ці речі будуть припинені? Як ми можемо змусити розробників додатків більш послідовно думати про ці презентації? **
**Ми сподіваємося на майбутнє, що штучний інтелект з часом стане частиною набору інструментів для того, як люди думають про те, як створювати програми як методологію розробки програмного забезпечення. Не лише додатки для iPhone чи подібні форми, але й весь хмарний сервіс, конвеєр даних і, зрештою, ітераційна конструкція всього продукту користувача.Звичайно, ми все ще на шляху дослідження. **
*ДякуюEvolution of Technology Life** усім моїм друзям за їхню підтримку автора протягом багатьох років, а також дякую ChaosAI**
*Дякуємо Dakai, AsyncGreed, Zhang Bo, Mao Li, Ethan і Mew за професійну допомогу
довідка:
1.
2. Довідка: Що таке ІВ в індустрії чіпів? -Xin Analects-Небо високе, а хмари темні Andi863
3. Домашня сторінка Кріса Латтнера (nondot.org)
4.nn.functional і nn.Module- Liang Yun 1991 Algorithm Food House 2020-07-10 21:47
5. Довідка: Jianshu, 12 серпня 2018 р. Просте пояснення, яке допоможе вам зрозуміти, що таке LLVM