The post has been translated automatically. Original language: Russian
Our language model works in three places: it prompts support staff using the knowledge base, responds to clients in a chat, and talks to them on the phone. All this is running on one server with one RTX 4090 graphics card. We didn't consider the cloud: call records and customer correspondence should not go outside, and we didn't want to pay for each request.
How does it all fit in
The card has 24 GB of memory, and it is divided into three models: the main language model with 14 billion parameters, speech recognition and voice synthesis. There is very little free space left. The most stringent requirement is set by the phone: the interlocutor should not wait for an answer in silence. Now the assistant answers in less than a second, and that's fine with us.
First thought: take a bigger model
It seemed logical: more parameters, smarter answers. We tried a model twice as big. To make it fit, I had to turn off my voice for a while.
She answered twice as slowly, almost two seconds per line. But she didn't get any smarter: where the small model offered the client a simple check, the big one more often advised to immediately call an engineer. More careful, but not more useful. Together with the voice, it does not fit on the card at all, and if part of the model is transferred to normal memory, everything starts to slow down terribly: RAM is many times slower than video memory.
Second thought: a model that lives in ordinary memory
There are models where only a part of the parameters work at each step. They can be stored in RAM and read on the processor. We tried this one.
She worked, but the line stretched to about eight seconds, which is unacceptable for a phone. And there was an unpleasant moment: she confidently came up with a figure to answer a question to which there is no answer in our database. A small model in the same situation honestly said "I don't know."
What we've learned
The quality of the response is not determined by the size of the model. If the search found the correct article in the knowledge base, our small model responds well. If you haven't found it, the big one doesn't help either, she just composes more convincingly. Therefore, we stopped looking for a larger model and started searching the database and checking: each response is checked against the articles found, and what is not there does not reach the client.
If you're thinking about your model, my advice is simple: before buying a second graphics card, check if your search finds the right piece of text. Most likely, the problem is there.
У нас языковая модель работает в трёх местах: подсказывает сотрудникам поддержки по базе знаний, отвечает клиентам в чате и разговаривает с ними по телефону. Всё это крутится на одном своём сервере с одной видеокартой RTX 4090. Облако не рассматривали: записи звонков и переписка клиентов не должны уходить наружу, да и платить за каждый запрос не хотелось.
Как всё это помещается
На карте 24 ГБ памяти, и делят её три модели: основная языковая модель на 14 миллиардов параметров, распознавание речи и синтез голоса. Свободного места остаётся совсем немного. Самое жёсткое требование задаёт телефон: собеседник не должен ждать ответа в тишине. Сейчас ассистент отвечает меньше чем за секунду, и это нас устраивает.
Первая мысль: взять модель побольше
Казалось логичным: больше параметров, умнее ответы. Мы попробовали модель вдвое крупнее. Чтобы она поместилась, пришлось на время выключить голос.
Отвечала она вдвое медленнее, почти две секунды на реплику. А умнее не стала: там, где маленькая модель предлагала клиенту простую проверку, большая чаще советовала сразу звать инженера. Осторожнее, но не полезнее. Вместе с голосом она на карту вообще не помещается, а если часть модели вынести в обычную память, всё начинает страшно тормозить: оперативка в разы медленнее видеопамяти.
Вторая мысль: модель, которая живёт в обычной памяти
Есть модели, у которых на каждом шаге работает только часть параметров. Их можно держать в оперативной памяти и считать на процессоре. Попробовали и такую.
Работать она работала, но реплика растягивалась секунд до восьми, для телефона это неприемлемо. И был неприятный момент: на вопрос, ответа на который в нашей базе нет, она уверенно придумала цифру. Маленькая модель в той же ситуации честно сказала «не знаю».
Что мы поняли
Качество ответа определяет не размер модели. Если поиск нашёл в базе знаний правильную статью, наша небольшая модель отвечает хорошо. Если не нашёл, не помогает и большая, она просто сочиняет убедительнее. Поэтому мы перестали искать модель крупнее и занялись поиском по базе и проверкой: каждый ответ сверяется с найденными статьями, и то, чего там нет, до клиента не доходит.
Если вы думаете о своей модели, мой совет простой: прежде чем покупать вторую видеокарту, проверьте, находит ли ваш поиск нужный кусок текста. Скорее всего, проблема там.