Текст презентации переведен близко к оригиналу. Вопросы к докладчику — избирательно с сокращениями.
Хост: Всем привет. Извините за опоздание. Добро пожаловать на наш первый день автономного вождения. Я надеюсь, мы сможем делать это более регулярно, чтобы держать вас в курсе наших разработок.
Около трех месяцев назад мы готовились к отчету о доходах за четвертый квартал с Илоном и другими руководителями. Я тогда сказал, что самый большой пробел в разговорах с инвесторами, между тем, что я вижу внутри компании и каково её внешнее восприятие, это наш прогресс в автономном вождении. И это понятно, последние пару лет мы говорили о наращивании производства Model 3, вокруг чего было много споров. На самом деле, многое происходило на заднем плане.
Мы работали над новым чипом для автопилота, полностью переработали нейронную сеть машинного зрения, и наконец, начали выпускать Full Self-Driving Computer (FSDC). Мы подумали, что это хорошая идея — просто открыть завесу, пригласить всех и рассказать обо всем, что мы делали в течение последних двух лет.
Около трех лет назад мы хотели использовать, хотели найти лучший чип для автономного вождения. Мы обнаружили, что нет чипа, который был разработан с нуля для нейронных сетей. Поэтому мы пригласили моего коллегу Пита Бэннона, вице-президента по разработке интегральных схем, разработать такой чип для нас. У него около 35 лет опыта в разработке чипов. В том числе 12 лет в компании P.A.Semi, которая позднее была приобретена Apple. Он работал над десятками различных архитектур и реализаций, и был главным дизайнером Apple iPhone 5, незадолго до присоединения к Tesla. К нам также присоединяется на Илон Маск. Спасибо.
Илон: Вообще-то, я собирался представить Пита, но раз это уже сделали, я добавлю что он просто лучший архитектор систем и интегральных схем в мире, которого я знаю. Это честь, что ты и твоя команда в Tesla. Пожалуйста, просто расскажи про невероятную работу, которую вы выполнили.
Пит: Спасибо Илон. Мне приятно быть здесь сегодня утром и по-настоящему приятно рассказать вам обо всей работе, которую мои коллеги и я выполнили здесь, в Tesla, за последние три года. Я расскажу вам немного о том, как все это началось, а затем познакомлю вас с компьютером FSDC и расскажу немного, как он работает. Мы углубимся в сам чип и рассмотрим некоторые из деталей. Я опишу, как работает специализированный ускоритель нейронной сети, который мы спроектировали, а затем покажу некоторые результаты, и, надеюсь, к тому времени вы еще не уснете.
Я был принят на работу в феврале 2016 года. Я спросил Илона, готов ли он потратить столько, сколько потребуется для создания этой специализированной системы, он спросил: «Мы победим?», я ответил: «Ну, да, конечно», тогда он сказал «Я в деле» и так все началось. Мы наняли кучу людей и начали думать о том, как будет выглядеть чип, разработанный специально для полностью автономного вождения. Мы потратили восемнадцать месяцев на разработку первой версии, и в августе 2017 года выпустили его для производства. Мы получили чип в декабре, он заработал, и на самом деле заработал очень хорошо с первой попытки. В апреле 2018 года мы внесли несколько изменений и выпустили версию B zero Rev. В июле 2018 года чип был сертифицирован, и мы приступили к полномасштабному производству. В декабре 2018 года стек автономного вождения заработал на новом оборудовании, и мы смогли приступить к переоборудованию служебных автомобилей и тестированию в реальном мире. В марте 2019г. мы начали установку нового компьютера в модели S и X, а в апреле — в Model 3.
Итак, вся программа, от найма первых сотрудников до полного запуска во всех трех моделях наших автомобилей, заняла чуть более трех лет. Это, пожалуй, самая быстрая программа разработки системы, в которой я когда-либо участвовал. И это на самом деле говорит о преимуществах высокой вертикальной интеграции, позволяющей вам выполнять параллельное проектирование и ускорять развертывание.
С точки зрения целей, мы были полностью сосредоточены исключительно на требованиях Tesla, и это значительно облегчает жизнь. Если у вас один-единственный клиент, вам не нужно беспокоиться о других. Одной из целей было сохранение мощности ниже 100 Вт, чтобы мы могли переоборудовать существующие машины. Мы также хотели снизить стоимость, чтобы обеспечить избыточность для большей безопасности.
В то время, когда мы тыкали пальцем в небо, я утверждал, что для управления автомобилем потребуется производительность нейронной сети не менее 50 триллионов операций в секунду. Поэтому мы хотели получить, по крайней мере столько, а лучше больше. Размеры пакета (batch) определяют количество элементов, с которыми вы работаете одновременно. Например, у TPU Google размер пакета 256, и вам нужно ждать, пока у вас не наберется 256 элементов для обработки, прежде чем вы сможете начать работу. Мы не хотели ждать и разработали наш движок с размером пакета один. Как только изображение появляется, мы немедленно обрабатываем его, чтобы минимизировать задержку и увеличить безопасность.
Нам требовался графический процессор для выполнения некоторой постобработки. Поначалу она занимала довольно много, но мы предполагали, что со временем её станет меньше, поскольку нейронные сети становятся все лучше и лучше. И это действительно произошло. Мы рисковали, поместив в дизайн довольно скромный графический процессор, и это оказалось хорошей идеей.
Защищенность очень важна, если у вас нет защищенного автомобиля, у вас не может быть безопасного автомобиля. Поэтому большое внимание уделяется защищенности и, конечно же, безопасности.
С точки зрения архитектуры чипа, как упоминал ранее Илон, в 2016 году не было ускорителя изначально созданного для нейронных сетей. Все просто добавляли инструкции к своим CPU, GPU или DSP. Никто не делал разработку с 0. Поэтому мы решили сделать это сами. Для других компонентов мы приобрели стандартные IP промышленных CPU и GPU, что позволило нам сократить время разработки и риски.
Еще одна вещь, которая была немного неожиданной для меня, это возможность использовать существующие команды в Tesla. У Tesla были отличные команды разработчиков блоков питания, анализа целостности сигналов, проектирования корпусов, прошивок, системного программного обеспечения, разработки плат и действительно хорошая программа валидации систем. Все это мы смогли использовать для ускорения программы.
Вот как он выглядит. Справа вы видите разъемы для видео, поступающего с камер автомобиля. Два компьютера автономного вождения в центре платы, слева — блок питания и коннекторы управления. Я люблю когда решение сводится к его основным элементам. У вас есть видео, вычислитель и питание, просто и понятно. Вот предыдущее решение Hardware 2.5, в которое вошел компьютер, и которое мы устанавливали последние два года. Вот новый дизайн для компьютера FSD. Они очень схожи. Это, конечно, обусловлено ограничениями программы модернизации автомобилей. Я хотел бы отметить, что на самом деле это довольно маленький компьютер. Он помещается позади бардачка, а не занимает половину багажника.
Как я говорил ранее, на плате есть два полностью независимых компьютера. Они выделены синим и зеленым. По сторонам каждого SoC вы можете видеть чипы DRAM. Внизу слева вы видите FLASH-чипы, которые представляют файловую систему. Здесь два независимых компьютера, которые загружаются и работают под собственной операционной системой.
Илон: Общий принцип состоит в том, что если какая-то часть выйдет из строя, машина сможет продолжить движение. Выходит из строя камера, цепь питания, один из компьютерных чипов Tesla — машина продолжает движение. Вероятность сбоя этого компьютера существенно ниже, чем вероятность что водитель потеряет сознание. Это ключевой показатель, по крайней мере, на порядок.
Пит: Да, поэтому одна из вещей, которые мы делаем для поддержания работы компютера, это избыточность источников питания. Первый чип работает на одном источнике питания, а второй на другом. То же самое для камер, половина камер работает на блоке питания отмеченным синим, другая половина — на зеленом. Оба чипа получают все видео и обрабатывают его независимо.
С точки зрения вождения, последовательность состоит в том, чтобы собирать много информации из окружающего вас мира, у нас есть не только камеры, но и радар, GPS, карты, гиростабилизатор (IMU), ультразвуковые датчики вокруг автомобиля. У нас есть угол поворота рулевого колеса, мы знаем, каким должно быть ускорение автомобиля. Все это объединяется, чтобы сформировать план. Когда план готов, два компьютера обмениваются своими версиями плана, чтобы убедиться, что они совпадает.
Предполагая, что план совпал, мы выдаем управляющие сигналы и ведем машину. Теперь, когда вы движетесь с новым управлением, вы, конечно, хотите его проверить. Мы проверяем, что переданные сигналы управления совпадают с тем, что мы намеревались передать исполнительным механизмам в автомобиле. Датчики используются, чтобы убедиться, что управление происходит в действительности. Если вы попросите автомобиль разогнаться, или тормозить, или повернуть направо или налево, вы можете посмотреть на акселерометры и убедиться, что это действительно происходит. Существует значительная избыточность и дублирование как наших данных, так и наших возможностей мониторинга данных.
Переходим к разговору о чипе. Он упакован в 37.5 мм BGA с 1600 контактов, большинство из которых это питание и земля. Если снять крышку, вы можете видеть подложку и кристалл в центре. Если отделить кристалл и перевернуть его вы увидите 13 000 контактов (bumps) С4 разбросанных по поверхности. Ниже находятся двенадцать металлических слоев интегральной схемы. Это 14-нанометровый процесс FinFET CMOS размером 260 мм.кв., это небольшая схема. Для сравнения обычный чип сотового телефона это около 100 мм.кв. А высокопроизводительный графический процессор будет около 600-800 мм.кв. Так что мы как бы посередине. Я бы назвал это золотой серединой, это удобный размер для сборки. Здесь 250 млн. логических элементов и 6 млрд. транзисторов, которые, хотя я и работаю над этим все это время, меня просто поражают. Чип изготовлен и испытан в соответствии с автомобильным стандартом AEC Q100.
Я хотел бы просто обойти чип и объяснить все его части. Пойду в том же порядке, что и пиксель, поступающий с камеры. В левом верхнем углу вы можете увидеть интерфейс камеры. Мы можем принимать 2,5 миллиарда пикселей в секунду, что более чем достаточно для всех имеющихся сенсоров. Сеть, которая распределяет данные из системы памяти к контроллерам памяти на правом и левом краях чипа. Мы используем стандартную LPDDR4, работающую со скоростью 4266 гигабит в секунду. Это дает нам максимальную пропускную способность 68 гигабайт в секунду. Это довольно хорошая пропускная способностью, но не чрезмерная, мы пытаемся остаться в золотой середине. Процессор обработки изображения имеет 24-битный внутренний конвейер, который позволяет нам в полной мере использовать HDR-сенсоры, которые есть в автомобиле. Он выполняет продвинутый Tone mapping, что помогает лучше выделить детали и тени, также выполняется продвинутое шумоподавление, которое просто улучшает общее качество изображений, которые мы используем в нейронной сети.
Сам ускоритель нейронной сети. На чипе их два. Каждый из них имеет 32 мегабайта SRAM для хранения временных результатов. Это минимизирует объем данных, которые мы должны передавать на микросхему и обратно, что помогает снизить энергопотребление. В каждом расположен массив 96х96 умножителей с накоплением, что позволяет нам делать почти 10 000 операций MUL/ADD за такт. Есть выделенный ускоритель ReLU, ускоритель пулинга. Каждый из них обеспечивает 36 триллионов операций в секунду работая на частоте 2 ГГц. Два ускорителя на кристалле дают 72 триллиона операций в секунду, что заметно вышей цели в 50 триллионов.
Видеокодер, видео с которого мы используем в автомобиле для многих задач, включая вывод изображения с камеры заднего вида, видео-регистрацию, а также для записи данных в облако, об этом Стюарт и Андрей расскажут позже. На чипе расположен довольно скромный графический процессор. Он поддерживает 32- и 16-битные числа с плавающей запятой. Также 12 64-разрядных процессоров A72 общего назначения. Они работают на частоте 2,2 ГГц, что примерно в 2,5 раза превышает производительность предыдущего рещения решении. Система безопасности содержит два процессора, которые работают в режиме lockstep. Эта система принимает окончательное решение, безопасно ли передавать управляющие сигналы на приводы автомобиля. Это то место, где два плана оъединяются, и мы решаем, безопасно ли двигаться вперед. И, наконец, система защиты, задача которой обеспечить, чтобы на этом чипе использовалось только программное обеспечение, криптографически подписанное Tesla.
Я рассказал вам много разных показателей производительности, и я думаю, что было бы полезно, посмотреть на перспективу. Мы рассмотрим нейронную сеть с нашей (narrow) камеры. Она занимает 35 млрд. операций. Если мы используем все 12 CPU для обработки этой сети, мы можем делать 1,5 кадра в секунду, это очень медленно. Совершенно не достаточно чтобы водить машину. Если бы мы использовали GPU на 600 GFLOPs для той же сети, мы получили бы 17 кадров в секунду, что все еще недостаточно для управления автомобилем с 8 камерами. Наш нейросетевой ускоритель может выдавать 2100 кадров в секунду. Вы видите, что объем вычислений в CPU и GPU пренебрежимо мал в сравнении с ускорителем нейронной сети.
Перейдем к разговору о нейросетевом ускорителе. Только водички попью. Слева здесь рисунок нейронной сети, чтобы дать вам представление о том, что вообще происходит. Данные поступают вверху и проходят через каждый из блоков. Данные передаются вдоль стрелок к различным блокам, которые обычно представляют собой свертки или обратные свертки с активационными функциями (ReLU). Зеленые блоки объединяют слои. Важно, что данные, полученные одним блоком, затем используются следующим блоком, и они вам больше не нужны — можете выбросить их. Так что все эти временные данные создаются и уничтожаются при прохождении через сеть. Нет необходимости хранить их вне чипа в DRAM. Поэтому мы храним их только в SRAM, и через несколько минут я объясню, почему это очень важно.
Если вы посмотрите на правую сторону, вы увидите, что в этой сети из 35 миллиардов операций почти все являются свертками, по сути скалярные произведения, остальные — деконволюцией (обратными свертками), также основанными на скалярном произведении, а затем ReLU и пулинг — относительно простые операции. Поэтому, если вы разрабатываете ускоритель, вы фокусируетесь на реализации скалярных произведений, основанных на сложении с накоплением и оптимизируете их. Но представьте, что вы ускоряете эту операцию в 10 000 раз и 100% превращаются в 0,1%. Внезапно операции ReLU и пулинга становятся весьма значительными. Поэтому наша реализация включает в себя выделенные ускорители для обработки ReLU и пулинга.
Чип работает в условиях ограниченного теплового бюджета. Нам нужно было очень осторожно относиться к тому, как мы сжигаем мощность. Мы хотим максимизировать количество арифметики, которое мы можем сделать. Поэтому мы выбрали 32 битное целочисленное сложение, оно потребляет в 9 раз меньше энергии, чем сложение с плавающей запятой. И мы выбрали 8-битное целочисленное умножение, что также потребляет значительно меньше энергии, чем другие операции умножения, и, вероятно, имеет достаточно точности для получения хороших результатов. Что касается памяти. Обращение к внешней DRAM примерно в сто раз дороже с точки зрения энергопотребления, чем использование локальной SRAM. Понятно, что мы хотим максимально использовать локальную SRAM.
С точки зрения управления, вот данные, которые были опубликованы в статье Марка Горовица (Mark Horowitz), где он критически рассмотрел, сколько энергии требуется для выполнения одной инструкции на обычном целочисленном процессоре. И вы видите, что операция сложения потребляет всего 0,15% от общей мощности. Все остальное — это накладные расходы на управление и прочее. Поэтому в нашем дизайне мы стремимся в избавиться от всего этого, насколько возможно. Что нас действительно интересует — это арифметика.
Так вот дизайн, который мы закончили. Вы можете видеть, что в нем основное место занимают 32 мегабайта SRAM, они слева, справа, в центре и внизу. Все вычисления выполняются в верхней центральной части. Каждый такт мы читаем 256 байтов данных активации из массива SRAM, 128 байтов весов из массива SRAM и объединяем их в массиве 96х96, который выполняет 9000 сложений с накоплением за такт при 2 ГГц. Это всего 36,8 трлн. операций. Теперь, когда мы закончили со скалярным произведением, мы выгружаем данные, пропускаем их через выделенный блок ReLU, опционально через пуллинг, и, наконец, помещаем их в буфер записи, где все результаты агрегируются. А затем мы записываем 128 байтов за такт обратно в SRAM. И все это происходит непрерывно. Мы работаем со скалярными произведениями, в то время как выгружаем предыдущие результаты, выполняем пуллинг и записываем результаты обратно в память. Если вы сложит все это на частоте 2 ГГц, вам потребуется 1 терабайт в секунду пропускной способности SRAM для поддержки работы. И железо обеспечивает это. Один терабайт в секунду пропускной способности на ускоритель, два ускорителя на чипе — два терабайта в секунду.
Ускоритель имеет относительно небольшой набор команд. Есть операция чтения DMA для загрузки данных из памяти, операция записи DMA для выгрузки результатов обратно в память. Три инструкции сверток (convolution, deconvolution, inner-product). Две относительно простых операции — сдвиг и поэлементная операция (eltwise). И конечно, операция остановки, когда вычисления окончены.
Нам пришлось разработать компилятор нейронной сети. Мы взяли нейронную сеть, обученную нашей командой разработчиков, в том виде в котором она использовалась в старом железе. Когда вы компилируете её для использования на новом ускорителе, компилятор выполняет объединение (fusion) слоев, что позволяет нам увеличить количество вычислений на каждое обращение к SRAM. Он также выполняет сглаживание обращений к памяти. Мы выполняем паддинг каналов, чтобы уменьшить конфликты между банками памяти. Выделение памяти также учитывает банки SRAM. Это тот случай, когда обработку конфликтов можно было бы реализовать аппаратно. Но с программной реализацией мы экономим на аппаратуре за счет некоторой сложности ПО. Мы также автоматически вставляем DMA операции, чтобы данные поступали для вычислений вовремя, не останавливая обработку. В конце мы генерируем код, данные о весах, сжимаем и добавляем контрольную сумму CRC для надежности. Нейронная сеть загружается в SRAM при запуске и находятся там все время работы.
Таким образом, чтобы запустить сеть, вы задаете адрес входного буфера, который содержит новое изображение, только что пришедшее с камеры; устанавливаете адрес выходного буфера; устанавливаете указатель на веса сети; поехали. Ускоритель «уходит в себя» и будет последовательно проходить через всю нейронную сеть, обычно на протяжении одного или двух миллионов тактов. По завершении, вы получаете прерывание и можете произвести постобработку результатов.
Переходя к результатам. У нас была цель уложиться в 100 Вт. Измерения на автомобилях, которые ездят с полным стеком автопилота, показали, что мы рассеиваем 72 ватта. Это немного больше, чем в предыдущем проекте, но значительное улучшением производительности — хорошее тому оправдание. Из этих 72 Вт около 15 Вт потребляется в нейронных сетях. Стоимость этого решения составляет около 80% от того, что мы платили раньше. Мы экономим деньги, перейдя на на новой компьютер. С точки зрения производительности мы взяли нейронную сеть (narrow) камеры, о которой я уже говорил, с 35 миллиардами операций, мы запустили ее на старом оборудовании и получили 110 кадров в секунду. Мы взяли те же данные и ту же сеть, скомпилировали их для нового компьютера FSD и, используя все четыре ускорителя, мы можем обработать 2300 кадров в секунду.
Илон: Я думаю, что это, пожалуй, самый значительный слайд
Пит: Я никогда не работал над проектом, где повышение производительности было более 3. Так что это было довольно весело. Если сравнивать с решением nvidia Drive Xavier, там чип обеспечивает 21 трлн. операций, в то время как наш FSDC с двумя чипами — 144 трлн. операций.
Итак, в заключение, я думаю, что мы создали решение, которое обеспечивает выдающуюся производительность 144 трлн. операций для обработки нейронной сети. Обладает выдающимися характеристиками энергопотребления. Нам удалось втиснуть всю эту производительность в тепловой бюджет, который у нас был. Это позволяет реализовать решение с дублированием. Компьютер имеет умеренную стоимость, и что действительно важно, FSDC обеспечит новый уровень безопасности и автономности в автомобилях Tesla, не влияя на их стоимость и пробег. Мы все с нетерпением ждем этого.
Илон: Если есть вопросы про оборудование, задавайте их прямо сейчас.
Причина, по которой я попросил Пита сделать подробное, гораздо более подробное, чем, возможно, большинство людей оценило бы, погружение в FSD компьютер Tesla, заключается в следующем. На первый взгляд кажется невероятным, как могло случиться, что Tesla, которая никогда раньше не проектировала подобные чипы, создала лучший чип в мире. Но это именно то, что произошло. И не просто лучший с небольшим отрывом, а лучший с огромным отрывом. Во всех Tesla, производимых прямо сейчас, стоит этот компьютер. Мы переключились с решения Nvidia для S и X около месяца назад и переключили Model 3 около десяти дней назад. Все производимые автомобили имеют все необходимые аппаратные средства и всё необходимое для полностью автономного вождения. Я скажу это еще раз: все автомобили Tesla, производимые сейчас, имеют все необходимое для полноценного автономного вождения. Все, что вам нужно сделать, это улучшить программное обеспечение. Позже сегодня вы сможете поездить на автомобилях с версией для разработчиков улучшенного ПО для автономного вождения. Вы сами увидите. Вопросы.
Q: у вас есть возможность использовать функций активации, отличные от ReLU?
Пит: да, у нас есть сигмоид, например
Q: может стоило перейти на более компактный техпроцесс, может быть, 10 нм или 7 нм?
Пит: в то время, когда мы начинали проектировать, не все IP, которые мы хотели приобрести, были доступны в 10 нм
Илон: стоит отметить, что мы завершили этот дизайн примерно полтора года назад и начали следующее поколение. Сегодня мы не говорим о следующем поколении, но мы уже на полпути. Все то, что очевидно для чипа следующего поколения, мы делаем.
Q: Компьютер предназначен работы с камерами. Можно ли использовать его с лидаром?
Илон: Лидар — это провальное решение, и любой, кто полагается на лидар — обречен. Обречен. Дорого. Дорогие датчики, которые не нужны. Это как иметь кучу дорогих ненужных приложений. Один маленький еще ничего, а куча — уже кошмар. Это глупо, вы увидите.
Q: Можете дать оценку влияния энергопотребления на пробег?
Пит: Для Model 3 целевое потребление составляет 250 Вт на милю.
Илон: Зависит от характера вождения. В городе эффект будет гораздо больше, чем на шоссе. Вы едете в городе в течение часа и у вас есть гипотетическое решение, которое потребляет 1 кВт. Вы потеряете 6км на Model 3. Если средняя скорость 25км/ч, то вы теряете 25%. Потребление системы оказывает огромное влияние на пробег в городе, где, как мы думаем, будет большая часть рынка роботакси, поэтому мощность чрезвычайно важна.
Q: Насколько надежны ваши технологии с точки зрения IP, вы не собираетесь раздавать IP бесплатно?
Пит: Мы подали десяток патентов на эту технологию. По сути, это линейная алгебра, которую я не думаю, что вы можете запатентовать. (Илон смеется)
Q: ваша микросхема может что-то сделать, может быть, зашифровать все веса, чтобы ваша интеллектуальная собственность оставалась внутри, и никто не смог просто украсть её
Илон: О, хотел бы я встретить человека, способного сделать это. Я бы нанял его в одно мгновение. Это очень сложная проблема. Даже если удастся извлечь данные, потребуется огромное количество ресурсов чтобы их как-то использовать.
Большим устойчивым преимуществом для нас является флот. Ни у кого нет флота. Веса постоянно обновляются и улучшаются на основе пройденных миллиардов миль. У Tesla в сто раз больше автомобилей с аппаратным обеспечением необходимым для обучения, чем у всех остальных вместе взятых. К концу этого квартала у нас будет 500 000 автомобилей с 8 камерами и 12 ультразвуковыми датчиками. Через год у нас будет более миллиона автомобилей с FSDC. Это просто огромное преимущество в данных. Это похоже на то, как у поисковой системы Google есть огромное преимущество, потому что люди используют ее, и люди фактически обучают Google своими запросами.
Хост: Одна вещь, которую нужно помнить о нашем компьютере FSD, это то, что он может работать с гораздо более сложными нейронными сетями для гораздо более точного распознавания изображений. Пора поговорить о том, как мы на самом деле получаем эти изображения и как мы их анализируем. У нас здесь старший директор AI — Андрей Карпаты, который объяснит вам все это. Андрей доктор наук из Стэнфордского университета, где он изучал информатику с акцентом на распознавание и глубокое обучение.
Илон: Андрей, почему бы тебе просто не начать, давай. Их Стэнфорда вышло много докторов, это не важно. Андрей ведет курс по компьютерному зрению в Стэнфорде, это гораздо важнее. Пожалуйста, расскажи о себе.
…
(Перевод оказался довольно не быстрым делом, не знаю хватит ли меня на вторую часть про систему обучения нейросети, хотя именно она кажется мне самой интересной.)
Комментариев нет:
Отправить комментарий