Интересное что-то
522 subscribers
2.72K photos
253 videos
140 files
4.53K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Forwarded from .ml
Скучали? А мы-таки собрали пост про неэффективное использование вычислительных ресурсов ⬇️

Если вы хотите выжать максимум из своей GPU, нужно знать, как устроена видеокарта. Если совсем на пальцах, у неё есть:

📌 DRAM — большая, но медленная память. Расположена на отдельном чипе или чипах. В современных GPU объём может достигать 80 ГБ и больше.
📌 Streaming Multiprocessors (SM) — непосредственно вычислительные модули с CUDA и Tensor-ядрами. Позволяют запускать операции параллельно, распределяя пайплайны вычислений между собой.
📌 SRAM — быстрая, но маленькая память (обычно сотни Кб). Находится внутри вычислительных блоков.

Чтобы выжать максимум производительности, нужно учитывать особенности архитектуры. Чтобы видеокарта что-то посчитала, ей нужно, чтобы данные для вычисления оказались в SRAM.

Но SRAM маленький, и хранить там все данные невозможно. Поэтому обычно данные сначала копируются из DRAM в SRAM, затем производится вычисление, а после этого результат снова копируется из SRAM в DRAM.

Например, стандартная цепочка PyTorch-вызовов (без TorchDynamo) всегда будет работать так, что будет происходить перегонка байтиков туда-сюда: DRAM-SRAM-DRAM-SRAM-... .


Но ведь есть такие операции, которые можно спокойно выполнить без копирования промежуточных результатов в DRAM и из DRAM. Например, перемножить один кусочек матрицы на другой, и затем применить к результату функцию активации. Такой операции будет достаточно одного только копирования входных данных из DRAM и сохранения итогового результата в DRAM, а матричное умножение и, например, ReLU можно применить друг за другом, используя лишь SRAM.

📝 Для более тонкого контроля над памятью можно писать кастомные GPU-ядра: с нуля, используя библиотеки CUDA или с помощью Triton.

Что такое Triton? 🛠

Это программный интерфейс, который позволяет писать кастомные GPU-ядра без прямого использования CUDA.


Чем он хорош:

📍Код пишется на некотором сабсете Python, следовательно порог входа не такой высокий, а работает это дело через JIT-компиляцию.
📍Обеспечивает гибкий контроль над памятью и параллелизмом — мы сами решаем, когда ходить в DRAM, а когда не ходить, и имеем больше контроля над тем, как мы будем параллелить вычисления.

Возвращаясь к примеру выше, Triton позволяет реализовать выполнение некоторой последовательности операций без копирования промежуточных результатов в/из DRAM.


Как написать кернел?

Кернел — это функция с декоратором triton.jit. Их главная особенность — маленькие программки, которые могут быть запущены параллельно. Каждая запущенная копия будет иметь свой pid-идентификатор. Можно сделать так, чтобы каждый идентификатор обрабатывал не все данные, а отдельный фрагмент (вспоминаем, что SRAM-то маленький, а ещё нужно как-то уметь в параллелизм между блоками).

Пример кернела из официальной документации.

В кернеле мы используем:

👾 Указатели на входные и выходные данные.
👾 Размер вектора.
👾 Размер блока (Block Size) — количество элементов, которые обрабатываются одним PID-ом.
👾 PID — идентификатор запущенной программки.

Также в примере используют бинарную маску при чтении и записи в DRAM, чтобы не выйти за пределы нужной нам памяти — например, когда размер вектора не кратен параметру block size.

А также, нужно реализовать небольшой враппер для того, чтобы запускать наш кернел — ниже оставлю пример кода 👇
Forwarded from .ml
Здесь всё стандартно. Выделяем в DRAM место для выходного тензора, запускаем наш кернел в стольких копиях, сколько нужно для обработки вектора длины N, если каждая копия обработает длину BLOCK_SIZE.

💜 Этот пост написал Макс Афанасьев, лидер DL-команд Точки, инженер-исследователь
Forwarded from Варим МЛ
Всем привет! А мне сегодня аж 33 года! Из них уже 10 лет в МЛ, а варю его в этом канале уже 3.5 года. Очень рад, что вы остаётесь со мной, и особенно приятно встречать подписчиков на конфах)

В качестве контента сегодня ссылка на прикольный гайд по борьбе с СДВГ. На самом деле мне он кажется подходящим для многих людей, даже без диагноза, особенно раздел Tactics. Вообще там многое напоминает книжки Дорофеева, так что техники проверены мной годами.

Я вот записываю вообще всё, даже если планирую это сделать через 3 секунды. Поверьте, за это время вас могут успеть отвлечь два раза)

Всем хорошего дня и лета! А кто будет в Питере 25 июня, приходите на прикольную дискуссию, поразгоняем про хаос

#Жека
Интересная работа от соавтора резнетов. Новый лосс для диффузионок, позволяющий получать бенефиты контрастивного обучения без положительных пар. Дешёвый лосс, который при добавлении к сильным бейзлайнам, заметно их улучшает.

Читать тут: https://t.me/gonzo_ML_podcasts/303
Forwarded from whargarbl
alphaxiv.org

сайт - копия архив, но без кожаных умников
находим статью и вместе с роботами читаем/разбираем/пишем отсутствующий код

Пожалуй лучший способ почувствовать себя умнее

Слава роботам!
Forwarded from Инжиниринг Данных (Dmitry)
Недавно увидел хорошие термины про тип работы - deep work vs shallow work.

Deep work - глубокое погружение в работу, которое позволяет сосредоточиться на проблеме, изучить необходимые технологии и процессы. Обычно такая работа требует как минимум несколько часов без отвлечений, и по окончании процесса вы получаете удовлетворение. От такой напряжённой работы вы не так устаете и не выгораете.

Shallow work, напротив, - это работа урывками, когда часто меняется контекст между задачами и проектами.

Даже хорошо спланированную работу в формате deep work можно легко превратить в shallow work. Достаточно начать реагировать на сообщения в мессенджере от коллег, менеджеров, друзей. Или участвовать в частых митингах.

Вот и получается: вроде день прошёл, а результата ноль.

Мне лично помогает несложное кольцо действий:
1. составить список 2–3 важных дел на день
2. не переключаться на новое дело, пока не закончу первое
3. блоки deep work в календаре, которые отменяют все встречи - они у меня стоят на год вперёд

Так же можно запланировать дела на неделю, добавив в них личные дела. Свой календарь я не разделяю на личный и рабочий.

Лично для вас будет эффективнее и приятнее выполнить от начала до конца одно важное дело, чем ответить всем подряд в мессенджерах, сходить на несколько митингов и при этом задержаться на работе на несколько часов - всё равно без результатов.
Forwarded from 5 minutes of data
HelixDB - это высокопроизводительная графо-векторная база данных с открытым исходным кодом, написанная на Rust, разработанная для приложений RAG и ИИ. Она объединяет хранение графовых и векторных данных, используя LMDB для обеспечения персистентности данных и соответствия ACID.

Код на GitHub
Вышла свежая лекция Andrej Karpathy про Software in the Era of AI

Там много всего интересного - за 40 минут он понятно и образно описывает текущее состояние AI, систем для кодинга и того, куда все это катится. Очень рекомендую к просмотру.

(Это его выступление для той самой школы AI стартапов в Сан-Франциско)

Andrej в том числе проходится по вайб-кодингу, который сам когда-то популяризовал.

"когда я вайб-кожу, то все пучком. Но вот если мне нужно что-то сделать на самом деле..."

("If I'm vibe-coding, it is all nice and great, but if I'm actually trying to get the work done, it's no so great to have an overractive agent doing all this kind of stuff").

В общем, как мы уже обсуждали раньше, вайб-кодинг - вещь прикольная для прототипчиков. Но если нам не играться надо, а работу делать и серьезные проекты пилить, то AI+Coding агентов уже нужно держать на коротком поводке. А для этого - работаем с планами, выдаем им системы для верификации, даем инструкции для использования всего этого.

Cоветую посмотреть: https://www.youtube.com/watch?v=LCEmiRjPEtQ

Ваш, @llm_under_hood 🤗
Продолжаем серию публикаций по LLM System Design. Сегодня говорим про важность внешних инструментов.

Паттерн 3. Дайте LLM правильные инструменты

Самый частый паттерн применения LLM — модель переводит запросы с человеческого языка в вызов нужных инструментов. Вы просите узнать баланс на карте, LLM отправляет запрос в нужный сервис, указывая идентификатор карты в параметрах. Вы говорите, что хотите найти в данных, LLM пишет SQL-запрос к правильной таблице.

Очень важно: любую детермированную логику выполнять кодом, а не LLM. Если нужно понять, можно ли дать этому клиенту скидку, пускай это решит детерминированный алгоритм, а LLM его правильно вызовет. Если нужно отсортировать документы по релевантности, пускай LLM выдаст релевантность, а отсортируете вы результат кодом. Более подробно про это читайте тут.

В дизайне системы очень удобно считать tool-ом любой другой элемент: внешний код, база данных (RAG), другие LLM и т.д. Вызов инструментов требует правильного заполнения всех аргументов, поэтому крайне удачно, что мы прошли Structured Output в Втором паттерне. Не забывайте его использовать.

Код — ваш лучший инструмент

Код это самый мощный tool, который вы только можете дать LLM (но риски кратно возрастают). LLM может персонально под задачу генерировать программу.

Пример. Делаем парсер, который не ломается, когда верстка сайта меняется. LLM сначала анализирует разметку сайта. Дальше по этой аналитике пишет код, который работает конкретно для этого сайта. Смотрите похожий кейс компании Ramp.

Код может быть не только tool-ом, но и управлять работой агента с другими tool-ами.
Вместо того, чтобы писать логику вызова tool-ов текстом, можно ее всю завернуть в программный код. Почему это удобно отлично написано тут.

На этой идеи построена библиотека smalagents от HuggingFace. Технические подробности в статье CodeAct.

Как научить LLM использовать инструменты

От самого простого к самому сложному:

1) Подключиться к MCP-серверу, если такой есть, и взять оттуда этот tool.

2) Самим сделать tool на базе каких-то API (не забываем про разницу MCP и API), напихать все в промпт

3) Самим сделать tool, зафайнтюнить LLM правильно этот tool использовать. Про это есть классическая статья.


Обязательная литература

- Объяснение, почему важно разделять LLM и tools

- Аналогичное правило, но для ИИ агентов

- Пост, чем дизайн tool для LLM отличается от просто API

- Статья, как важно Structured Output для tools

Любые вопросы обязательно пишите в комментарии.

Если нужно обсудить конкретно ваш случай - пишите вопрос в личные сообщения.

#llm_system_design
Forwarded from Метаверсище и ИИще (Sergey Tsyptsyn ️️)
This media is not supported in your browser
VIEW IN TELEGRAM
Minimax M1 - бесплатная генерация видосов на халяву (пока).

В общем я взял промпты из MovieBench и стал их пихать в свежий агент Minimax M1, о котором сегодня с восторгом писал.

Генерит как миленький. Бесплатно.

Пруф: https://agent.minimax.io/chat?id=281006706552925

Пробуем: https://agent.minimax.io/

@cgevent