﻿# Перенос сборки llama.cpp на другую GPU: compute capability и CUDA targets

При переносе llama.cpp CUDA binary на другую GPU проверьте, для каких архитектур он собран.

Автор: Команда Retrivium
Обновлено: 2026-11-01
Канонический URL: https://retrivium.ai/ru/journal/llama-cpp-portable-cuda-build/
Language: ru

При переносе llama.cpp CUDA binary на другую GPU проверьте, для каких архитектур он собран. Ошибка отсутствующего kernel image может быть связана с targets сборки, а не с поврежденными весами. Отдельно учитывайте CPU instruction set. Для воспроизводимого переноса сохраните compiler, Toolkit, CUDA architectures и GGML_NATIVE, затем проверьте executable на целевой машине. Одного совпадения имени бинарника и успешного копирования файла недостаточно.

## Разделите host и device код

Приложение содержит CPU код и GPU kernels. [Руководство сборки llama.cpp](https://raw.githubusercontent.com/ggml-org/llama.cpp/master/docs/build.md) описывает CUDA и параметры архитектур, а также настройки native оптимизации. Сборка, адаптированная к CPU исходной машины, может оказаться непереносимой независимо от GPU. Поэтому диагностика должна различать отказ запуска host executable и ошибку при первом CUDA вычислении. Не переустанавливайте модель, если процесс не может выполнить инструкцию либо найти подходящий device kernel: файлы весов находятся на другом слое причины.

## Проверьте состав CUDA targets

[Руководство NVCC](https://docs.nvidia.com/cuda/cuda-programming-guide/02-basics/nvcc.html) объясняет PTX, Cubin и возможность нескольких targets внутри binary. Native compilation не является универсальной гарантией переносимости. Сопоставьте compute capability целевых GPU с тем, что поддерживает конкретный Toolkit и что включено в сборку. Не добавляйте произвольный SM номер по названию поколения без проверки. Сохраните фактические CMake значения и сообщения compiler, чтобы отличать намеренно ограниченную сборку от случайного автоматического выбора оборудования исходного узла.

## Пример manifest переноса

Создайте таблицу с host CPU target, Toolkit version, compiler, `CMAKE_CUDA_ARCHITECTURES`, `GGML_NATIVE` и перечнем целевых машин. Заполните ее результатом сборки, а не желаемой конфигурацией. Для каждого узла добавьте запуск справки, обнаружение backend и короткий функциональный запрос. Это схема проверки, не обещание поддержки любой архитектуры. Успешная справка подтверждает только часть host пути; она не запускает все GPU kernels, поэтому считать ее достаточным smoke test для inference было бы ошибкой.

## Диагностическая развилка

Если executable не стартует, исследуйте host зависимости и CPU ISA. Если стартует, видит GPU, но падает на вычислении, проверьте CUDA targets и совместимость runtime. Если модель загружается, но нужная операция не поддерживается, найдите ограничения конкретного backend или model architecture. Не смешивайте эти случаи в одно общее сообщение «CUDA не работает». Сохраните первую содержательную ошибку и build metadata до повторной установки: новый случайный бинарник может скрыть причину и сделать дальнейшее сравнение невоспроизводимым.

## Примите целевую сборку

После исправления повторите проверку на каждом заявленном классе устройств и сохраните checksum binary вместе с manifest. Отдельно измеряйте производительность: более широкая совместимость не гарантирует одинаковые kernels или скорость на всех GPU. При обновлении Toolkit повторите список поддерживаемых targets и сборку, поскольку набор допустимых архитектур меняется. Полезный итог показывает, какие машины действительно проверены, какие лишь планируются и какие исключены конкретным toolchain. Он не объявляет архитектурную совместимость по объему VRAM или бренду видеокарты. Такая запись позволяет следующему оператору выбрать правильный пакет и понять, когда нужен rebuild, вместо бесконечного перебора quantization файлов или изменения context, не связанных с отсутствующим кодом для целевого устройства.

## Связанные материалы

[Установка vLLM: как проверить GPU, драйвер и сборку](/ru/journal/vllm-install-compatibility/); [llama.cpp на Windows: сборка и проверка выбранного backend](/ru/journal/llama-cpp-windows-build/).
