Saiga на GPU
Привет Илья,
появился вопрос по использованию модели на GPU. Работаю с LangChain
, пока что в Google Colab (потом планирую уйти на виртуалку с GPU); инициализирую и использую модель так же, как и обычную Llama2, передаю в RetrievalQA
Chain, при этом на тех параметрах, с которыми Llama2 генерит ответ за 6-8 с, Saiga за 20 мин так ничего и не успела сгенерировать. Если есть опыт, не мог бы, пожалуйста, поделиться, как запускать модель на GPU?
Dependencies:
llama-cpp-python==0.1.77
(устанавливал с флагами CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 --force-reinstall
)langchain==0.0.264
Релевантный кусок кода (там есть DB retriever
, ее создание опускаю):
from langchain.llms import LlamaCpp
from langchain.chains import RetrievalQA
llm = LlamaCpp(
model_path='./models/ggml-model-q8_0.bin',
n_ctx=2048,
n_batch=512,
n_gpu_layers=16,
temperature=0,
max_tokens=4096
)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type='stuff',
retriever=retriever
)
query = ...
qa_chain(query)
В итоге с последней командой модель генерит ответ, но очень медленно, как я говорил, за 20 мин не успел сгенериться цельный фрагмент текста.
Дополнительно: если есть опыт, как себя модель ведет при увеличении числа одновременных запросов? Скажем, если вместо 1 пользователя будут с разных устройств посылать на мой сервер запросы 50, на сколько возрастет объем занятой VRAM в GPU? Можно ли это как-то рассчитать? Если есть какие-либо комментарии, буду благодарен.
Любые релевантные комментарии могут пригодиться. Заранее спасибо!
Best,
Макс
Прекрасно , я уже парюсь с langchain во всех конфигах модели
- Есть же Saiga2: https://huggingface.co/IlyaGusev/saiga2_7b_gguf
- В README не просто так лежит скрипт запуска, у Сайги свой формат промпта, которому нужно следовать
- Даже на CPU скорость генерации быстрее, чем описанная, см. https://huggingface.co/spaces/IlyaGusev/saiga2_13b_ggml
- Почему n_gpu_layers=16? В LLaMA-7B 32 слоя.
- max_tokens=4096 при максимальной длине контекста у Сайги в 2000
- Потестил saiga2_7b_gguf, получил 5 токенов в секунду при загрузке в GPU всех 32 слоёв.
- Зачем вообще использовать llama.cpp для инференса на GPU? Чистый transformers даёт задержку не хуже, я уж молчу про TGI.
- Про одновременные запросы — как сервер написан, так и будет вести. При наивном сервере — не возрастёт вообще, запросы просто в очереди лежать по паре десятков минут будут.
Привет Илья,
Супер, спасибо за подробный комментарий! Пока что я только начинаю с LLMs на более серьезном уровне, так что пока методом проб и ошибок. Буду разбираться)
Best,
Макс