Qwen3, T4 и разные фреймворки
Ещё немного знаний о запуске моделей на картах T4.
Во-первых, карты T4 не поддерживают тип bfloat16, поэтому при запуске надо указать параметр dtype со значением half.
При этом, если вы используете фреймворк vllm и получаете ошибку «Unsupported conversion from f16 to f16», то вероятно у вас установлена библиотека triton с багом. Надо её либо обновить до последней версии, либо сдаунгрейдить до 3.2.0. Первое нам не помогло, а вот даунгрейд выручил.
Во-вторых, вот у нас восемь карт с памятью по 16 гигабайт каждая, всего 128 гигабайт. Модель Qwen3-30B там запустится, простой расчёт в уме для этого я показывал. А что если нам надо запустить на тех же картах ещё что-то?
Не проблема, давайте запустим не на всех картах, а скажем на пяти, 80 гигабайт же должно хватить, но не тут-то было. Количество карт, с которыми будет работать модель, должно делить 32 нацело — это особенность архитектуры модели и её запуска на фреймворке.
Соответственно, мы можем запустить Qwen3-30B только на восьми картах — на четырёх картах и меньше просто места не хватит, а остальное число карт не подходит.
Поэтому чтобы уместить на этих картах что-то ещё, надо «поджать» количество потребляемой памяти на каждой из карт. Это делается параметром gpu-memory-utilization, при этом придётся ещё и скорректировать max_model_len, чтобы генерируемое умещалось в кеши.
И последнее. Это слабо связано с предыдущим, но куда-то записать хочется. Чтобы скомилировать llama.cpp восьмой версией GCC, надо использовать следующие команды:
cmake -S llama.cpp -B llama.cpp/build \
-DCMAKE_CUDA_ARCHITECTURES=75 \
-DCMAKE_CUDA_FLAGS="-fPIC" \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD_LIBRARIES="-lstdc++fs" \
-DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first \
--target llama-cli llama-gguf-split llama-serverДобавлено позже: проблема тут в том, что GCC до версии 10 не содержит std::filesystem в стандартной библиотеке, её можно подключить снаружи, но надо, чтобы она попала в конец линковки.