# Ядра

Операции PyTorch являются универсальными. Производители оборудования и сообщество создают специализированные реализации, которые работают быстрее на конкретных платформах. Установка этих оптимизированных ядер представляет собой сложную задачу, поскольку требует соответствия версий компиляторов, CUDA toolkits и платформенно-специфичных сборок.

| платформа | поддерживаемые устройства |
| :--- | :--- |
| NVIDIA GPU (CUDA) | Современные архитектуры с вычислительной мощностью 7.0+ (Volta, Turing, Ampere, Hopper, Blackwell) |
| Видеокарты AMD (ROCm) | Совместимо с устройствами, поддерживающими ROCm |
| Apple Silicon (Metal) | Чипы серии M (M1, M2, M3, M4 и новее) |
| Intel GPU (XPU) | Intel Data Center GPU Max Series и совместимые устройства |

[Kernels](https://huggingface.co/docs/kernels/index) решает эту проблему, распространяя предварительно скомпилированные бинарные файлы через [Hub](https://huggingface.co/kernels-community). Он определяет вашу платформу во время выполнения и автоматически загружает нужный бинарный файл.

При `use_kernels=True` Transformers определяет слои, для которых доступны оптимизированные реализации ядер. Ядра загружаются с Hub и [кэшируются](../installation#cache-directory) только при необходимости, чтобы сократить время запуска. Ядра ускоряют вычислительно сложные операции, такие как внимание, нормализация и объединённые операции.

Не для всех операций существуют реализации на уровне ядра. Если ядро недоступно, библиотека использует стандартный PyTorch.

## Детерминизм

Некоторые ядра дают результаты, слегка отличающиеся от результатов PyTorch, из-за изменения порядка операций или стратегий накопления. Эти различия функционально эквивалентны, но влияют на воспроизводимость.

Для детерминированного поведения попробуйте следующее.

- См. документацию репозитория ядра для гарантий детерминизма. Например, ядро SDPA в [gpt-oss-metal-kernels](https://huggingface.co/kernels-community/gpt-oss-metal-kernels#4-scaled-dot-product-attention-sdpa) совпадает с реализацией PyTorch в 97% случаев.
- Отключите конкретные ядра, которые влияют на ваш сценарий использования.
- Установите случайные зерна и флаги детерминизма PyTorch.

## Ресурсы

- руководство [Загрузка ядер](./loading_kernels) для начала работы
- Репозиторий [Kernels](https://github.com/huggingface/kernels) на GitHub
- статья в блоге [«Улучшите свои модели за 5 минут с помощью Hugging Face Kernel Hub»](https://huggingface.co/blog/hello-hf-kernels)

