Torchchat - это небольшая кодовая база, демонстрирующая способность беспрепятственно запускать большие языковые модели (LLMS). С помощью Torchchat вы можете запускать LLM, используя Python, в своем собственном (C/C ++) приложении (настольный компьютер или сервер) и на iOS и Android.
Важный
Обновление 25 сентября 2024 года: Torchchat имеет мультимодальную поддержку Llama3.2 11b !!
Чтобы попробовать это, закончите раздел установки ниже, затем перейдите к нашему мультимодальному руководству, чтобы узнать больше.
Следующие модели поддерживаются Torchchat и имеют ассоциированные псевдонимы.
| Модель | Мобильный дружелюбный | Примечания |
|---|---|---|
| Meta-Llama/Meta-Llama-3.2-3b-Instruct | ✅ | Настраивается для chat . Псевдоним до llama3.2-3b . |
| Метама/Метама-3,2-3B | ✅ | Лучше всего для generate . Псевдоним для llama3.2-3b-base . |
| Meta-Llama/Llama-Guard-3-1b | ✅ | Настроен на классификацию. Псевдоним для llama3-1b-guard . |
| Meta-Llama/Meta-Llama-3.2-1b-Instruct | ✅ | Настраивается для chat . Псевдоним до llama3.2-1b . |
| Meta-Llama/Meta-Llama-3.2-1b | ✅ | Лучше всего для generate . Псевдоним для llama3.2-1b-base . |
| Meta-Llama/Llama-3.2-11B-Vision-Instruct | Мультимодальный (изображение + текст). Настраивается для chat . Псевдоним до llama3.2-11B . | |
| Метамама/лама-3,2-11B-визирование | Мультимодальный (изображение + текст). Настроен на generate . Псевдоним для llama3.2-11B-base . | |
| Meta-Llama/Meta-Llama-3.1-8b-Instruct | ✅ | Настраивается для chat . Псевдоним для llama3.1 . |
| Метама/Метама-3,1-8B | ✅ | Лучше всего для generate . Псевдоним для llama3.1-base . |
| Метамама/мета-лама-3-8B-инструкт | ✅ | Настраивается для chat . Псевдоним для llama3 . |
| Метамама/мета-лама-3-8B | ✅ | Лучше всего для generate . Псевдоним для llama3-base . |
| Meta-Llama/Llama-2-7B-Chat-HF | ✅ | Настраивается для chat . Псевдоним для llama2 . |
| Meta-Llama/Llama-2-13B-Chat-HF | Настраивается для chat . Псевдоним llama2-13b-chat . | |
| Метама/лама-2-70b-чат-HF | Настраивается для chat . Псевдоним для llama2-70b-chat . | |
| Meta-Llama/Llama-2-7b-HF | ✅ | Лучше всего для generate . Псевдоним для llama2-base . |
| Meta-Llama/Codellama-7b-Python-HF | ✅ | Настраивается на Python и generate . Псевдоним codellama . |
| Meta-Llama/Codellama-34B-Python-HF | ✅ | Настраивается на Python и generate . Псевдоним codellama-34b . |
| Мистралай/Мистраль-7b-V0.1 | ✅ | Лучше всего для generate . Псевдоним для mistral-7b-v01-base . |
| Mistralai/Mistral-7B-Instruct-V0.1 | ✅ | Настраивается для chat . Псевдоним, чтобы mistral-7b-v01-instruct . |
| Mistralai/Mistral-7B-Instruct-V0.2 | ✅ | Настраивается для chat . Псевдоним для mistral . |
| Tinyllamas/Story15m | ✅ | Игрушечная модель для generate . Псевдоним для stories15M . |
| Tinyllamas/Stories42M | ✅ | Игрушечная модель для generate . Псевдоним для stories42M . |
| Tinyllamas/Stories110M | ✅ | Игрушечная модель для generate . Псевдоним для stories110M . |
| openllm-research/open_llama_7b | ✅ | Лучше всего для generate . Псевдоним, чтобы open-llama . |
Следующие шаги требуют, чтобы у вас был установлен Python 3.10.
Кончик
Torchchat использует последние изменения из различных проектов Pytorch, поэтому настоятельно рекомендуется использовать Venv (используя приведенные ниже команды) или Conda.
git clone https://github.com/pytorch/torchchat.git
cd torchchat
python3 -m venv .venv
source .venv/bin/activate
./install/install_requirements.shИнтерфейсы Torchchat используются через команды Python и нативных бегунов . В то время как команды Python перечисляются в меню - -help, последние изучаются в их соответствующих разделах.
python3 torchchat.py --help # Output
usage: torchchat [-h] {chat,browser,generate,export,eval,download,list,remove,where,server} ...
positional arguments:
{chat,browser,generate,export,eval,download,list,remove,where,server}
The specific command to run
chat Chat interactively with a model via the CLI
generate Generate responses from a model given a prompt
browser Chat interactively with a model in a locally hosted browser
export Export a model artifact to AOT Inductor or ExecuTorch
download Download model artifacts
list List all supported models
remove Remove downloaded model artifacts
where Return directory containing downloaded model artifacts
server [WIP] Starts a locally hosted REST server for model interaction
eval Evaluate a model via lm-eval
options:
-h, --help show this help message and exitВывод Python (чат, генерировать, браузер, сервер)
Экспорт (экспорт)
Управление запасами (скачать, список, удалить, где)
Оценка (Eval)
Большинство моделей используют обнимающееся лицо в качестве канала дистрибуции, поэтому вам нужно будет создать учетную запись об объятиях. Создайте токен для пользователя обнимающего лица, как задокументировано здесь с роли write .
Войдите в обнимающееся лицо:
huggingface-cli login
Взгляните на доступные модели:
python3 torchchat.py listЗатем загрузите один для тестирования (в этой README используется llama3.1)
python3 torchchat.py download llama3.1
Примечание
Эта команда может побудить вас запросить доступ к Llama 3 с помощью обнимающего лица, если у вас еще нет доступа. Просто следуйте подсказкам и повторно запустите команду, когда доступ к доступу.*
Эта подкоманда показывает местоположение конкретной модели.
python3 torchchat.py where llama3.1Это полезно в сценариях, когда вы не хотите проходить
Эта подкоманда удаляет указанную модель
python3 torchchat.py remove llama3.1 Более подробную информацию об этих командах можно найти, добавив опцию --help .
Самый простой способ запустить модель в Pytorch - это нетерпеливое выполнение. Это режим выполнения по умолчанию как для Pytorch, так и для Torchchat. Он выполняет вывод без создания экспорта артефактов и не используя отдельного бегуна.
Модель, используемая для вывода, также может быть настроена и адаптирована к конкретным потребностям (компиляция, квантование и т. Д.). См. Руководство по настройке для параметров, поддерживаемых Torchchat.
Кончик
Для получения дополнительной информации об этих командах, пожалуйста, обратитесь к меню --help .
Этот режим позволяет общаться с LLM интерактивным образом.
python3 torchchat.py chat llama3.1Этот режим генерирует текст на основе подсказки ввода.
python3 torchchat.py generate llama3.1 --prompt " write me a story about a boy and his bear "Этот режим обнаруживает API REST для взаимодействия с моделью. Сервер следует спецификации API OpenAI для завершения чата.
Чтобы проверить API REST, вам понадобится 2 терминала : один для размещения сервера, а один, чтобы отправить запрос. В одном терминале запустите сервер
python3 torchchat.py server llama3.1Shell по умолчанию: python3 torchchat.py server llama3.1 & server_pid = $! ; Sleep 90 # подождите, пока сервер будет готов принять запросы
В другом терминале запросите сервер, используя curl . В зависимости от конфигурации модели этот запрос может занять несколько минут, чтобы ответить.
Примечание
Поскольку эта функция находится в активной разработке, не используется каждый параметр. См. API/API.PY для получения подробной информации о том, какие параметры запроса реализованы. Если вы столкнетесь с какими -либо проблемами, пожалуйста, прокомментируйте проблему отслеживания GitHub.
Установка stream на «true» в запросе издает ответ в кусочках. Если stream не является "или нет" true ", то клиент будет ждать полного ответа с сервера.
Пример ввода + вывод
curl http://127.0.0.1:5000/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "llama3.1",
"stream": "true",
"max_tokens": 200,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
{"response":" I'm a software developer with a passion for building innovative and user-friendly applications. I have experience in developing web and mobile applications using various technologies such as Java, Python, and JavaScript. I'm always looking for new challenges and opportunities to learn and grow as a developer.nnIn my free time, I enjoy reading books on computer science and programming, as well as experimenting with new technologies and techniques. I'm also interested in machine learning and artificial intelligence, and I'm always looking for ways to apply these concepts to real-world problems.nnI'm excited to be a part of the developer community and to have the opportunity to share my knowledge and experience with others. I'm always happy to help with any questions or problems you may have, and I'm looking forward to learning from you as well.nnThank you for visiting my profile! I hope you find my information helpful and interesting. If you have any questions or would like to discuss any topics, please feel free to reach out to me. I"}
Shell по умолчанию: kill $ {server_pid}
Эта команда открывает базовый интерфейс браузера для локального чата, запрашивая локальный сервер.
Во -первых, выполните шаги в разделе сервера выше, чтобы запустить локальный сервер. Затем, в другом терминале, запустите интерфейс. Запуск следующего откроет вкладку в вашем браузере.
streamlit run torchchat/usages/browser.py
Используйте слайдер «Max Recsomt Tokens», чтобы ограничить максимальное количество токенов, сгенерированных моделью для каждого ответа. Нажмите кнопку «Сбросить чат», чтобы удалить историю сообщений и запустить свежий чат.
AOTI собирает модели перед выполнением для более быстрого вывода. Процесс создает застегнутый файл PT2, содержащий все артефакты, сгенерированные Aotinductor, и файл .so с выполненным содержанием, которое затем загружается для вывода. Это может быть сделано с помощью питона и C ++.
Следующий пример экспортирует и выполняет модель Llama3.1 8B. Первая команда компилирует и выполняет фактический экспорт.
python3 torchchat.py export llama3.1 --output-aoti-package-path exportedModels/llama3_1_artifacts.pt2Примечание
Если на вашей машине есть CUDA, добавьте этот флаг для производительности --quantize torchchat/quant_config/cuda.json экспорте.
Для получения более подробной информации о квантовании и о том, какие настройки использовать для вашего варианта использования посетите нашу руководство по настройке.
Чтобы запустить в среде Python, используйте подкоманду Generate, как ранее, но включите файл PT2.
python3 torchchat.py generate llama3.1 --aoti-package-path exportedModels/llama3_1_artifacts.pt2 --prompt " Hello my name is "Чтобы запустить в среде C ++, нам нужно построить двоичный файл бегуна.
torchchat/utils/scripts/build_native.sh aotiЗатем запустите скомпилированный исполняемый файл с PT2.
cmake-out/aoti_run exportedModels/llama3_1_artifacts.pt2 -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time " Исполнитель позволяет оптимизировать вашу модель для выполнения на мобильном или встроенном устройстве.
Прежде чем запустить какие -либо команды в Торччате, которые требуют исполнителя, необходимо сначала установить исполнитель.
Чтобы установить исполнитель, запустите следующие команды. Это загрузит Repo Repo на ./et-build/src и установит различные библиотеки исполнителя в ./et-build/install.
Важный
Следующие команды должны выполняться из корневого каталога Torchchat.
export TORCHCHAT_ROOT=${PWD}
./torchchat/utils/scripts/install_et.sh
Подобно AOTI, чтобы развернуть на устройство, мы сначала экспортируем артефакт PTE, затем загружаем артефакт для вывода.
В следующем примере используется модель инструктирования Llama3.1 8b.
# Export
python3 torchchat.py export llama3.1 --quantize torchchat/quant_config/mobile.json --output-pte-path llama3.1.pte
Примечание
Мы используем --quantize torchchat/quant_config/mobile.json для квантования модели LLAMA3.1, чтобы уменьшить размер модели и повысить производительность для вариантов использования на устройстве.
Для получения более подробной информации о квантовании и о том, какие настройки использовать для вашего варианта использования посетите нашу руководство по настройке.
Хотя исполнитель не фокусируется на выводе на рабочем столе, он способен сделать это. Это удобно для тестирования моделей PTE, не отправляя их на физическое устройство.
В частности, есть 2 способа сделать это: Pure Python и через бегуна
# Execute
python3 torchchat.py generate llama3.1 --pte-path llama3.1.pte --prompt "Hello my name is"
Построить бегуна
torchchat/utils/scripts/build_native.sh etВыполнить с помощью бегуна
cmake-out/et_run llama3.1.pte -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time "Следующее предполагает, что вы выполнили шаги для настройки исполнителя.
.dmg и переместите папку приложения Cmake в /Applications .sudo /Applications/CMake.app/Contents/bin/cmake-gui --installincreased-memory-limit . Откройте проект Xcode:
open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeprojПримечание. Если вы сталкиваетесь с любыми проблемами, связанными с зависимостью пакетов, закройте Xcode, очистите некоторые кэши и/или продукты Build, и снова откройте проект Xcode:
rm -rf ~ /Library/org.swift.swiftpm ~ /Library/Caches/org.swift.swiftpm ~ /Library/Caches/com.apple.dt.Xcode ~ /Library/Developer/Xcode/DerivedData
Нажмите кнопку «Воспроизведение», чтобы запустить приложение в симуляторе.
Чтобы запустить на устройство, убедитесь, что вы настроили его для разработки и профиль подготовки с increased-memory-limit . Обновите идентификатор пакета приложения, чтобы соответствовать вашему профилю обеспечения с необходимыми возможностями.
После успешного запуска приложения скопируют файлы экспортированной модели исполнителя ( .pte ) и Tokenizer ( .model ) в папку Illama. Вы можете найти модельный файл под названием llama3.1.pte в текущем каталоге torchchat и файле Tokenizer по адресу $(python3 torchchat.py where llama3.1)/tokenizer.model .
On My iPhone > iLLaMA .Следуйте руководящим принципам пользовательского интерфейса приложения, чтобы выбрать файлы модели и токенизатора из локальной файловой системы и выпустите подсказку.
Нажмите на изображение ниже, чтобы увидеть его в действии!
Следующее предполагает, что вы выполнили шаги для настройки исполнителя.
Загрузите файл AAR, который содержит библиотеку Java и соответствующую библиотеку JNI, для создания и запуска приложения.
Переместите загруженный файл AAR в torchchat/edge/android/torchchat/app/libs/ . Вам может потребоваться создать каталог torchchat/edge/android/torchchat/app/libs/ Если его не существует.
Нажмите на модель и файл токенизатора на ваше устройство. Вы можете найти модельный файл под названием llama3.1.pte в текущем каталоге torchchat и файле Tokenizer по адресу $(python3 torchchat.py where llama3.1)/tokenizer.model .
adb shell mkdir -p /data/local/tmp/llama
adb push <model.pte> /data/local/tmp/llama
adb push <tokenizer.model or tokenizer.bin> /data/local/tmp/llama
Используйте Android Studio, чтобы открыть скелет приложения Torchchat, расположенный по адресу torchchat/edge/android/torchchat .
Нажмите кнопку «Воспроизведение» (^r), чтобы запустить ее для эмулятора/устройства.
Следуйте руководящим принципам пользовательского интерфейса приложения, чтобы выбрать модель и файлы токенизатора из локальной файловой системы. Затем выпустите подсказку.
ПРИМЕЧАНИЕ. Файл AAR, указанный на шаге 1, имеет Tiktoken и Tiktoken Tokenizer. Чтобы настроить или использовать пользовательский токенизатор и время выполнения, измените код исполнителя и используйте этот скрипт для создания библиотеки AAR.
В качестве альтернативы, вы можете запустить torchchat/utils/scripts/android_example.sh , который устанавливает Java, Android SDK Manager, Android SDK, эмулятор Android (если физическое устройство не найдено), создает приложение и запускает его для вас. Его можно использовать, если у вас нет графического интерфейса.
export TORCHCHAT_ROOT=$(pwd)
sh torchchat/utils/scripts/android_example.sh
Примечание: эта функция по -прежнему находится в процессе работы, и не все функции работают
Использует библиотеку LM_EVAL для оценки точности модели по различным задачам. По умолчанию в Wikitext и может контролироваться вручную, используя задачи и ограничения ARG. См. Оценку
Примеры
Жесткий режим:
python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5
Чтобы проверить недоумение для пониженной или квантованной модели, передайте ее так же, как вы могли бы генерировать:
python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5
Torchchat воплощает в себе детали философии дизайна Pytorch, особенно «удобство использования во всем остальном».
Торччат-это библиотека Native-Pytorch. В то время как мы предоставляем интеграцию с окружающей экосистемой (например, модели обнимающего лица и т. Д.), Вся основная функциональность написана в Pytorch.
Torchchat разработан, чтобы быть простым для понимания, использования и расширения.
Torchchat обеспечивает хорошо проверенные компоненты с высокой баром на правильности. Мы предоставляем
Мы действительно ценим наше сообщество и вклады, внесенные нашими замечательными пользователями. Мы будем использовать этот раздел, чтобы вызвать некоторые из этих вкладов! Если вы также хотите помочь, пожалуйста, посмотрите руководство по содействию.
Чтобы связаться с нами и другими членами сообщества, мы приглашаем вас присоединиться к нашему сообществу Slack, заполнив эту форму. Как только вы присоединитесь, вы можете:
#torchchat-general по общим вопросам, обсуждению и поддержке сообщества.#torchchat-contributors если вы заинтересованы в том, чтобы внести непосредственный вклад в разработку проекта.С нетерпением жду возможности обсудить с вами о Torchchat Future!
Раздел общепринятых ошибок/исключений настройки. Если этот раздел не содержит вашей ситуации, проверьте проблемы GitHub
Доступ к модели ограничен, и вы не находитесь в авторизованном списке
Некоторые модели требуют дополнительного шага для доступа. Перейдите по ссылке, указанной в ошибке, чтобы получить доступ.
Неудачное строительное колесо
Если ./torchchat/utils/scripts/install_et.sh не удастся с ошибкой, такой как Building wheel for executorch (pyproject.toml) did not run successfully выполняется, что он связывается с более старой версией Pytorch, установленной на другом способе, как через Homebrew. Вы можете нарушить ссылку, удалив другие версии, такие как brew uninstall pytorch Примечание: вы можете сломать что -то, что зависит от этого, так что имейте в виду.
SERTICATE_VERIFY_FAILED
Запустить pip install --upgrade certifi .
Если вы сталкиваетесь с ошибками или трудностями с использованием Torchchat, пожалуйста, подайте проблему GitHub.
Пожалуйста, укажите точную команду, которую вы выполняли, и вывод этой команды. Кроме того, запустите этот скрипт и включите вывод, сохраненный для system_info.txt , чтобы мы могли лучше отлаживать вашу проблему.
(echo "Operating System Information"; uname -a; echo ""; cat /etc/os-release; echo ""; echo "Python Version"; python --version || python3 --version; echo ""; echo "PIP Version"; pip --version || pip3 --version; echo ""; echo "Installed Packages"; pip freeze || pip3 freeze; echo ""; echo "PyTorch Version"; python -c "import torch; print(torch.__version__)" || python3 -c "import torch; print(torch.__version__)"; echo ""; echo "Collection Complete") > system_info.txt
Содержание хранилища Torchchat предоставляется без каких -либо гарантий о производительности или совместимости. В частности, Torchchat делает доступные модельные архитектуры, написанные на Python для Pytorch, которые могут не работать таким же образом или соответствовать тем же стандартам, что и оригинальные версии этих моделей. При использовании содержимого репозитория Torchchat, включая любые модельные архитектуры, вы несете единоличную ответственность за определение целесообразности использования или перераспределения содержания хранилища Torchchat и принять какие -либо риски, связанные с использованием вашего содержания хранилища Torchchat или любых моделей, выходов или результатов, как отдельно, так и в комбинации с любыми другими технологиями. Кроме того, у вас могут быть другие юридические обязательства, которые регулируют использование вами другого контента, такие как условия обслуживания для сторонних моделей, веса, данные или другие технологии, и вы несете единоличную ответственность за выполнение всех таких обязательств.
Спасибо сообществу за все удивительные библиотеки и инструменты, которые вы построили на локальном выводе LLM.
Георги Герганов и его проект GGML освещают внимание на общине и вдохновляют многие другие проекты.
Андрей Карпати и его проект Llama2.c. Так много великих (и простых!) Идеев в Llama2.c, которые мы непосредственно приняли (как идеи, так и код) из его репо. Вы никогда не пойдете не так, следуя работе Андрея.
Майкл Гшвинд, Берт Махер, Скотт Волчок, Бин Бао, Чен Ян, Хуамин Ли и Му-Чу Ли, которые создали первую версию Nanogpt ( DSOGPT ) с AOT Inductor, доказывающим, что AOTI может использоваться для создания эффективных LLM, а DSO являются жизнеспособным распределительным форматом для моделей. Наногпт.
Берт Махер и его лама.
Кристиан Пюрш, Гораций он, Джо Исааксон и многие другие за их многочисленные вклад в ускорение моделей Genai в «Что -нибудь, быстро!» pytorch.org блоги, и, в частности, Horace он для GPT, Fast!, который мы напрямую приняли (как идеи, так и код) из его репо.
Torchchat выпускается по лицензии BSD 3. (Дополнительный код в этом распределении охватывается лицензиями MIT и Apache Open Source.) Однако у вас могут быть другие юридические обязательства, которые регулируют использование вами контента, такие как Условия обслуживания для сторонних моделей.