Примечания к исследованию Llama2.c 4: анализ run.c
Примечания к исследованию Llama2.c 4: анализ run.c

В llama2.c один из вопросов, который я больше всего хочу знать: как прочитать и запустить файл модели (bin) вручную (c)? В общем, есть несколько вопросов:

  • Как хранить и читать структуру и веса графа?
  • Как экспорт модели обучения в скрипт py соответствует чтению run.c? На основе двоичного кода?
  • Какие переменные необходимо поддерживать в процессе работы графа расчета DAG? Статус сохраняется и обновляется?
  • Как бороться с подсказкой?
  • Как реализовать такое количество операторов в вычислительном графе?

До реализации Карпат они всегда считались запретной зоной для крупных производителей и невыполнимой задачей. После просмотра подробной серии руководств, таких как микро-град и нано-gpt, я узнал, что Карпати хорошо умеет использовать базовые языки для создания компонентов игрушечных колес, а затем выполнять полную игрушечную работу. Я потратил 2 дня свободного времени на чтение кода, рисование структурной схемы и примерное метафизическое понимание механизма, прежде чем моя память затуманилась или отвлеклась на другие вещи, я записывал заметки для ностальгии. Дизайн такой красивый! !

1.структура/класс структуры типа конструкции

run.c реализует три класса структуры. Подробности можно увидеть в коде. Рисунок легче понять, чем сам код.

1) Конфигурация: Структурная конфигурация гиперпараметров модели.

2) TransformerWeights: хранилище весов, соответствующее структуре графа.

3) RunState: контекст во время работы

Среди них структуры Config и TransformerWeight считываются и анализируются двоичным файлом model.bin. Вместе они представляют собой структуру модели, а вес RunState — контекст времени выполнения.

2.function

1) Функции Malloc, free и init, относящиеся к структурным классам.

2)net blocks

Это также отвечает на вопрос реализации оператора. Помимо запуска финальной обработки токена и pos, Llama2 LLM является повторением стандартизированного блока Transformer. Отличием конкретной серии моделей является размер блока Transformer и конфигурация форматирования, а количество используемых операторов ограничено.

3)byte pair encode (BPE) tokenizer

Просто прочитайте файл tokenizer.bin, экспортируйте два объекта типа поиска, а затем выполните процесс для каждого токена...

4) utils

argmax и sample используются для обработки с температурными параметрами или без них.

3.main loop

Основной процесс run.c очень традиционен, и ощущение «он должен быть спроектирован таким образом» очень ортодоксально, а изысканный дизайн заключается в дизайне структуры.

4. Передача файла модели: model.py > bin > run.c

Проще говоря: model.py::export --> bin --> run.c::Config TransformerWeight, специально в сочетании с рисунком ниже, посмотрите на следующий код:

  • Функция экспорта() файла model.py: выводит конфигурацию модели (заголовок) и веса в двоичный файл;
  • Config и TransformerWeight файла run.c инициализируются последовательно из файла bin.

В частности, следует отметить, что веса хранятся в группах в соответствии с порядком типа оператора (Внимание, ffn), а затем слоя слоя; все переменные в TransfoermerWeight являются указателями на пространство, где фактически хранятся веса, и они основаны на первом анализе информационного приложения Come Out Config. Такая конструкция гарантирует, что структуры Config и TransformerWeight занимают одно и то же пространство (независимо от размера модели).

5. Незаконченное дело

Нет времени или мало смысла сравнивать выводы механизма вывода Python и C, а также недостаточно времени, чтобы проследить код run.c за один шаг, чтобы увидеть поток данных;

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]