TurboPilot — это автономный клон второго пилота, который использует библиотеку llama.cpp для запуска модели Salesforce Codegen с 6 миллиардами параметров в 4 ГБ ОЗУ. Он в значительной степени основан на проекте fauxpilot и вдохновлен им.
NB: На данный момент это проверка концепции, а не стабильный инструмент. Автодополнение в этой версии проекта довольно медленное. Не стесняйтесь играть с ним, но ваш опыт может отличаться.
Теперь поддерживается StableCode 3B. Инструктируйте, просто используйте квантовые модели GGML TheBloke и установите -m stablecode
.
Новое: рефакторинг + упрощение : исходный код был улучшен, чтобы упростить расширение и добавление новых моделей в Turbopilot. Система теперь поддерживает несколько разновидностей модели.
Новое: поддержка Wizardcoder, Starcoder, Santacoder . Turbopilot теперь поддерживает современные модели локального завершения кода, которые предоставляют больше языков программирования и поддержку «заполнения середины».
Пиар на этот проект и соответствующий форк GGML приветствуются.
Сделайте форк, внесите свои изменения и затем откройте PR.
Самый простой способ опробовать проект — получить предварительно обработанные модели, а затем запустить сервер в докере.
У вас есть 2 варианта получения модели
Вы можете загрузить предварительно преобразованные и предварительно квантованные модели с Huggingface.
Для пользователей с низким объемом оперативной памяти (4–8 ГиБ) я рекомендую StableCode, а для пользователей с высокой мощностью (16+ ГиБ ОЗУ, дискретный графический процессор или процессор Apple) я рекомендую WizardCoder.
Turbopilot по-прежнему поддерживает модели кодирования первого поколения из v0.0.5
и более ранних сборок. Хотя старые модели требуют повторного квантования.
Полный каталог моделей вы можете найти на MODELS.md.
Следуйте этому руководству, если вы хотите самостоятельно поэкспериментировать с квантованием моделей.
Загрузите последнюю версию двоичного файла и извлеките его в корневую папку проекта. Если двоичный файл не предусмотрен для вашей ОС или вы предпочитаете собрать его самостоятельно, следуйте инструкциям по сборке.
Бегать:
./turbopilot -m starcoder -f ./models/santacoder-q4_0.bin
Приложение должно запустить сервер на порту 18080
, вы можете изменить это с помощью опции -p
, но это порт по умолчанию, к которому vscode-fauxpilot пытается подключиться, поэтому вы, вероятно, захотите оставить это в покое, если вы не уверены, что знаете, что вам нужно. делаешь.
Если у вас многоядерная система, вы можете контролировать количество используемых процессоров с помощью опции -t
— например, на моем AMD Ryzen 5000, который имеет 6 ядер/12 потоков, которые я использую:
./codegen-serve -t 6 -m starcoder -f ./models/santacoder-q4_0.bin
Для запуска устаревших моделей кодирования. Вместо этого просто измените флаг типа модели -m
на codegen
.
ПРИМЕЧАНИЕ. Turbopilot 0.1.0 и новее повторно квантовает ваши модели кодирования, старые модели версии 0.0.5 и старше. Я работаю над предоставлением обновленных моделей квантованного кода.
Вы также можете запустить Turbopilot из готового образа докера, представленного здесь.
Вам все равно нужно будет скачать модели отдельно, тогда можно будет запустить:
docker run --rm -it
-v ./models:/models
-e THREADS=6
-e MODEL_TYPE=starcoder
-e MODEL= " /models/santacoder-q4_0.bin "
-p 18080:18080
ghcr.io/ravenscroftj/turbopilot:latest
Начиная с версии 0.0.5 турбокод теперь поддерживает вывод CUDA. Чтобы запустить контейнер с поддержкой cuda, вам необходимо включить nvidia-docker, использовать версии с тегами cuda и передать --gpus=all
в docker с доступом к вашему графическому процессору следующим образом:
docker run --gpus=all --rm -it
-v ./models:/models
-e THREADS=6
-e MODEL_TYPE=starcoder
-e MODEL= " /models/santacoder-q4_0.bin "
-e GPU_LAYERS=32
-p 18080:18080
ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda11-7
Если у вас достаточно большой графический процессор, то установка GPU_LAYERS
позволит турбопилоту полностью перегрузить вычисления на ваш графический процессор, а не копировать данные вперед и назад, что значительно ускоряет вывод.
Замените ghcr.io/ravenscroftj/turbopilot:v0.1.0-cuda11
на ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-0
или ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-2
если вы используете CUDA 12.0 или 12.2 соответственно.
Для запуска этого контейнера вам понадобится CUDA 11 или CUDA 12 позже. Вы сможете увидеть /app/turbopilot
в списке при запуске nvidia-smi
.
Начиная с версии 0.0.5 доступна версия CUDA исполняемого файла Linux — для этого требуется, чтобы на компьютере была установлена libcublas 11 — я мог бы в какой-то момент собрать debs Ubuntu, но на данный момент запуск в докере может быть более удобным, если вы хотите использовать CUDA-графический процессор.
Вы можете использовать разгрузку графического процессора с помощью опции --ngl
.
Продолжается поддержка официального плагина второго пилота VS Code (см. заявку № 11). API теперь должен быть широко совместим с OpenAI.
Чтобы использовать API от VSCode, я рекомендую плагин vscode-fauxpilot. После установки вам нужно будет изменить несколько настроек в файле settings.json.
Preferences: Open User Settings (JSON)
{
... // other settings
"fauxpilot.enabled" : true ,
"fauxpilot.server" : " http://localhost:18080/v1/engines " ,
}
Теперь вы можете включить fauxpilot, нажав CTRL + SHIFT + P
и выбрав Enable Fauxpilot
Плагин будет отправлять вызовы API работающему процессу codegen-serve
при нажатии клавиши. Затем он будет ждать завершения каждого запроса, прежде чем отправлять дальнейшие запросы.
Вы можете отправлять запросы к http://localhost:18080/v1/engines/codegen/completions
, которые будут вести себя так же, как та же конечная точка Copilot.
Например:
curl --request POST
--url http://localhost:18080/v1/engines/codegen/completions
--header ' Content-Type: application/json '
--data ' {
"model": "codegen",
"prompt": "def main():",
"max_tokens": 100
} '
Должно получиться что-то вроде этого:
{
"choices" : [
{
"logprobs" : null ,
"index" : 0 ,
"finish_reason" : " length " ,
"text" : " n """ Main entry point for this script. """n logging.getLogger().setLevel(logging.INFO) n logging.basicConfig(format=('%(levelname)s: %(message)s')) nn parser = argparse.ArgumentParser( n description=__doc__, n formatter_class=argparse.RawDescriptionHelpFormatter, n epilog=__doc__) n "
}
],
"created" : 1681113078 ,
"usage" : {
"total_tokens" : 105 ,
"prompt_tokens" : 3 ,
"completion_tokens" : 102
},
"object" : " text_completion " ,
"model" : " codegen " ,
"id" : " 01d7a11b-f87c-4261-8c03-8c78cbe4b067 "
}