Еженедельный отчёт TileLang (2026-10-19 ~ 2026-10-23)
Отчётный период: с 19 октября 2026 г. (понедельник) по 23 октября 2026 г. (пятница), всего 5 рабочих дней Источники материалов: 5 выпусков ежедневного отчёта о динамике сообщества TileLang (19.10, 20.10, 21.10, 22.10, 23.10); совокупное окно сбора пяти выпусков — с 07:00 16.10 по 07:00 23.10; кроме того, проведена дополнительная проверка 29 репозиториев организации tile-ai в 168-часовом окне и перепроверка страниц релизов, тегов и файлов VERSION каждого репозитория (подробнее в приложении)
1. Главные новости недели
-
Официально выпущен TileFoundry 0.0.3: планирование на уровне инструкций передано агенту, на H200 предзаполнение Qwen3.8-27B во всех трёх диапазонах быстрее, чем в SGLang (21.10): 21.10 в 10:26 опубликован тег v0.0.3, на PyPI —
tilefoundry==0.0.3, кодовое название «Agent-driven scheduling». Ключевое изменение — кому принадлежит право планирования: компилятор перечисляет, какими инструкциями может быть реализована каждая операция HIR и что требуется каждой из них, агент выбирает из кандидатов, а компилятор затем понижает выбранное расписание в TIR; в CLI добавленыschedule candidatesиschedule facts, инструкции объявляются как операции AtomSched с явным контрактом операндов TIR, начиная с CUDA MMA atom, SM90 WGMMA и асинхронного копирования. По производительности приведены три группы реальных цифр: предзаполнение Qwen3.8-27B на одной H200 для 1024 / 4096 / 8192 токенов — 80,29 / 309,61 / 631,19 мс соответственно, у SGLang — 89,06 / 317,11 / 638,25 мс; для коротких последовательностей 128 / 256 / 512 / 1024 токена результат составляет 1,88 / 1,41 / 1,10 / 1,03 от SGLang. Известны две проблемы: wheel пока не упаковывает заголовочные файлы среды выполнения CUDA (из установочного пакета нельзя собрать CUDA kernel, требуется checkout исходников; будет исправлено в следующей версии), а также неверная оценка в таймлайне производительности дляinsert_slice,tf.zerosпри межсетевом (cross-mesh) размещении (#239). -
SemiAnalysis отвела отдельную главу TileLang Ascend: из шести репозиториев с поддержкой Ascend на момент написания статьи работал только TileLang (21.10 ~ 22.10): опубликованная 21.10 статья «The Huawei-DeepSeek Symbiosis» в подзаголовке прямо перечисляет микробенчмарки Huawei Ascend 950PR, анализ DSv4.1 Flash, поддержку Ascend в DeepSeek, AICPU и TileLang Ascend. Три пункта, непосредственно связанных с TileLang: во-первых, из шести репозиториев с поддержкой Ascend (TileLang, DeepGEMM, DeepEP, TileKernels, FlashMLA, DeepSelect) на момент написания работал только TileLang, поскольку CANN 9.2.0 ещё не выпущен, а DeepSeek требует CANN 9.2.0 и компилятор C++20, тогда как 9.2.0-beta.2 последний не предоставляет; во-вторых, бэкенд Ascend 950 уже включён в основной репозиторий TileLang, а не существует лишь в отдельном репозитории адаптации, и обеспечивает нативную компиляцию, планирование, синхронизацию и интеграцию со средой выполнения; AutoSchedule на основе зависимостей по данным и оценок времени выполнения определяет перекрытие и число слотов буферов на кристалле, на 950PR для небольших одиночных операторов сокращая время до 40%; в-третьих, при сравнении с CANN и Triton-ascend «на некоторых размерах удаётся сравняться с CANN или превзойти её», а оптимальная реализация переключается в зависимости от размера (автор оговаривает, что это простой бенчмарк при горячем кэше). Статья также указывает на пробел в экосистеме: большинство оптимизаций ориентированы на суперузлы, а на x86-хостах в vLLM-Ascend 0.26.0rc1 по-прежнему множество проблем. 22.10 South China Morning Post в материале «Jensen’s nightmare» пересказала тот же отчёт — это вторичное распространение, не представляющее нового технического прогресса, но показывающее, что данный вывод проникает в мейнстримную медийную повестку.
-
Главный репозиторий за неделю прошёл три раунда упрочения корректности, типы дефектов расширились от «неверных вычислений» до «неверно выбранной цели» и «искажения состояния на этапе компиляции» (10-19 ~ 10-23): первый раунд расчистил warp-специализацию и геометрию конвейера — #3503 заставляет каждый поток чистого TMA-производителя достигать прямого барьера (исправляет зависание parity в #3470), #2342 заставляет братские конвейеры разделять буфер с единственным раскрытием (исправляет падение четырёхмерного LayoutInference в #2309), #3536 добавляет смещение потока для
T.cumsumна разделяемом буфере, #2822 сохраняет транзитивные зависимости копирования. Второй раунд расчистил молчаливые числовые ошибки — #2818 требует явного K-заполнения для неподдерживаемых MMA tile (ранее K-атомы незаметно уменьшались), #2815 исправляет падение редукции с сохраняемой размерностью(64,1), #3550 заставляет предикаты TIR синхронно переписываться при повышении разрядности целых, #3070 исправляет пакетныйfinalize_reducer, который сворачивал только первый выходной блок, #3350 добавляет предварительную проверку трёх комбинаций источник/цель/округление для cast, #2860 заставляет CUDA target без arch выдавать ошибку вместо молчаливой подстановкиsm_50. Третий раунд расчистил состояние этапа компиляции — #3579 включает ненулевую нижнюю границу цикла в анализ векторизации (10 файлов +818/-198, закрывает #2669 и #2616), #3612 клонирует analyzer перед переписыванием векторизации, #3226 исправляет недействительность привязки старого analyzer после разбиения параллельного цикла. Общая черта всех трёх партий — отсутствие ошибок и выдача недостоверных результатов только при определённых размерах или формах циклов. -
Центр тяжести линии Ascend смещается к обратному проходу обучения и низкоуровневым путям передачи данных: за одну неделю влито 11 PR в репозиторий адаптации и открыто двустороннее направление sparse_mla (10-20 ~ 10-23): операторы со стороны обучения сосредоточенно реализуются —
indexer_bwdв #1887 (+1294, обслуживает разреженную донастройку DSA, одновременно поддерживает двойные бэкенды AscendC и PTO, разделён на три уровня ядер: быстрый, универсальный и cast), обратный проход SiTU-GLU в #1877 (+854, семантика согласована сaclnnSituGluGradиз CANN, используется для обратного прохода активации гейта Kimi K3 Stable LatentMoE, на 910B3 перекрёстная проверка с официальным aclnn даёт максимальную относительную ошибку около 3e-3), LSTM в #1892 (+2304, 12 jit-ядер, поддерживает многослойное стекирование, двунаправленность и проекцию LSTMP) и GRU в #1902 (+2267, 8 ядер, вручную отключён AUTO_SYNC, чтобы избежать примерно 58 PipeBarrier на каждый временной шаг). В очереди на рассмотрение далее добавляются прямой проход и обратное распространениеsparse_mla(#1929 / #1928), kpool-сжатие GLM-5.3 (#1910) и серия WY fast (#1827 и др.). Со стороны пути передачи данных #3530 с 18 файлами +993/-256 позволяет сжатому NZ-буферу поддерживать частичное копирование UB→L1 и явно задаёт межстрочный шаг группы C0; #1795 локализует проблему невозможности выразить компактный межстрочный шаг меньше 32B, на практике второй burst читает element 8 вместо element 1, исправляя искажение вывода keepdim reduce; #1903 переводит JIT-кэш на атомарную публикацию и восстановление при удалении кэша. -
TileOPs за неделю принял 68 коммитов, SM89 и SM90 идут параллельно как основные направления, спецификации и покрытие бенчмарками одновременно достигли 205/205 (10-19 ~ 10-23): статистическая ветка организации 10-18 обновилась после 20 коммитов за один день и 44 коммитов за окно мониторинга до «реализовано 205/205, отбенчмарковано 205/205» — оба показателя одновременно на максимуме. В направлении SM90 за неделю добавлено шесть warp-специализированных kernel — постраничный GQA forward (#2668), FP8 lightning indexer с двумя consumer warpgroup (#2666), MLA decode со смещённым «качелями» (#2665), персистентный обход dense prefill (#2706), dense GQA decode (#2694), причинно-следственное скользящее окно band (#2696). В направлении SM89 сосредоточились на закрытии пробелов для потребительских и однокарточных сценариев: блочно-масштабируемый FP8 групповой GEMM (#2659) и INT8 W8A8 (#2655) вышли в один день, у FP8 BMM тайл по умолчанию изменён на 64×64 (#2681, 1×16×64×128 снизился с 5.161 до 3.799 us), верхняя граница M для W4A16 расширена до 64 (#2672, M=17 / 32 / 64 снизились на 43.35 / 47.20 / 40.00 процентных пункта), постраничный DSA реализован через MMA (#2669, 0.269 ms против эталона PyTorch FP32 0.727 ms), NSA top-k расширен до 2048 сжатых блоков (#2675). Параллельно два исправления NaN оба оказались на пути warp-специализации: неверная проверка периода активности разделяемой памяти (#2708) и переполнение при слиянии FMA под fast math (#2699).
-
PTO переходит от «отдельного пути исполнения» к «автоматической векторизации + бэкенду исполнения по умолчанию» (на рассмотрении, с 10-18): главный репозиторий PTO фреймворк векторизации #3512 позволяет пользователю писать скалярно-параллельный
T.Parallel(поэлементные операции, управляющий поток, редукции) внутриT.SimdVF(lanes=L), компилятор векторизует его в инструкции PTO VMI, после компиляции через PTOAS он исполняется на Ascend 950; масштаб вырос с 44 файлов и 18988 строк 10-18 до 50 файлов и 21022 строк 10-21; #3516 предполагает, чтоtarget="pto"сexecution_backend="auto"будет разрешаться вtvm_ffiи устанавливаться по умолчанию. Уже принятое сопутствующее — это серия исправлений семантики хранения, предикатов и редукций:T.alloc_ssв #3514, редукция SimdVF dim=1 в #3437, знаковость целых в PTO в #3582, экспоненциальный рост предикатов в #3581, выделение локальных переменных SIMT-векторов в #3523. Главный репозиторий одновременно через #3511 добавляет явный pitch для локального копирования L0 на стороне AscendC (24 файла +1458/-187, что позволяет собрать один GEMM tile из нескольких копирований) — эти два пути развиваются параллельно, а не заменяют друг друга. -
Вторая форма downstream-дистрибуции: Sunrise выпускает PR релиза 0.1.15+sunrise.1.2.0 (22.10): #9 22.10 в 16:48 создал ветку
candidate/sunrise-0.1.15-1.2.0-20261019и открыл PR, обновив дистрибутив Sunrise до0.1.15+sunrise.1.2.0, включив TileLang 0.1.15 и сопутствующие проверенные изменения TileOPs, TileKernels, TVM, tvm-ffi; импорт исходников и слияние, а также адаптация дистрибуции закоммичены отдельно, в итоге адаптирован wheel для бэкенда TANG и исправлена регрессия slice GEMM. Заявленная проверка: 55 контрактных тестов на локальной машине пройдено, 54 теста codegen конвейера TANG пройдено, два lint job и проверка границ доверия пройдены; однако после сборки wheel S2 установочная проверка import smoke завершилась ошибкой наtangGetDeviceCount. Данный PR ещё не слит. -
За неделю в сообществе появилось несколько новых репозиториев: китайскоязычный системный учебник, репозиторий операторов сообщества CANN, рабочий процесс agent и эксперимент с бэкендом Hexagon (20.10 ~ 22.10):
huandu/tilelang-tutorialсоздан 20.10, позиционируется как «китайскоязычный системный учебник TileLang от нуля до единицы», охватывает написание операторов, механизмы времени компиляции и два бэкенда — NVIDIA и Ascend; это первое появление систематизированного китайскоязычного учебного репозитория;Atlas-Ascend-Fork/ops-tilelangсоздан 20.10, это репозиторий активов операторов сообщества CANN для NPU Ascend (централизованное управление реализациями kernel, автоматизированное тестирование, стандартные рабочие нагрузки и базовые показатели производительности), 22.10 первый пуш с исправлениями;tilelang/agentзапушен 22.10, сам README представляет собой шаблон исполняемого prompt, с@tilelang-operator-dev/SKILL.mdдля внедрения предметных знаний, оптимизация операторов идёт по десятишаговому циклу; такжеSoilSoi1/tilelang-hexagon(создан 20.10, эксперимент сообщества с бэкендом Hexagon), перекликающийся с находящимся на рассмотрении в основном репозитории #2155 поддержкой бэкенда Hexagon HMX.
2. Прогресс ключевых проектов (основной репозиторий tilelang)
Версии и релизы
- Последний тег и релиз основного репозитория по-прежнему v0.1.15 (выпущен 30.09), за всю неделю ни новых тегов, ни новых записей страницы релизов, к пятнице этой недели прошло 23 дня. Проверка файла
VERSIONпо-прежнему даёт 0.1.15, последняя веха в README остаётся на бэкенде Ascend 950 от 30.09. - TileFoundry 0.0.3 — единственная новая версия на этой неделе (21.10 10:26), а также первый новый тег в организации с 30.09. Теги линий адаптации за всю неделю не менялись: MetaX
v0.1.14(17.09), Moore Threadsv0.1.15+musa.1(30.09), MLIR Ascendv0.1.2.020.sglang.poc(09.09), Ascendv0.1.2.000. - Ограничения downstream по-прежнему застряли между 0.1.12 и 0.1.15:
pyproject.tomlв TileOPs до сих пор жёстко зафиксирован наtilelang==0.1.12, попытка обновления до 0.1.15 от 18.10 в #2554 закрыта и не слита. Указанная в PR причина блокировки — 29 smoke test, проходивших на 0.1.12, падают на 0.1.15: 28 из них вызваны тем, чтоT.Pipelinedс динамическим extent оставляет в хвосте cp.asyncptx_wait_group(3 - t * 2), и CUDA codegen сообщает об ошибке Downcast, ещё 1 — ошибка проверки на null в LegalizeSafeMemoryAccess в ветке, свёрнутой в False. Недавно слитый на этой неделе тест-кейс SM89 прогонялся как на 0.1.12, так и на dev-версии 0.1.15, что показывает: условием прохождения обновления является проверка на двух базовых линиях.
Компилятор, языковой уровень и путь исполнения
- Windows ARM64 в релизном конвейере (#2962, смержен 10-19, 12 файлов +356/-45): добавлен установочный скрипт PowerShell, который забирает локальный установочный пакет CUDA 13.4 windows_arm64 из канала предварительных выпусков NVIDIA и размещает его по фиксированному пути; добавлены модуль
FindPipCUDAToolkitи совместимый заголовокwindows_arm64_clang_compat.h, устранены различия заголовочных файлов и встроенных функций инструментальной цепочки MSVC на ARM64, синхронно скорректированы pyproject, два файла requirements и layout, а также вспомогательный модуль MSVC. Это третья non-x86 поверхность поставки после ROCm и Ascend. - Разделение lower trace на исходники хоста и устройства (#3496, смержен 10-19, 6 файлов +121/-63): на стороне устройства выводятся
codegen_device.cppс базовой линией.originalи последней версией.latest, на стороне хоста отдельно выводятсяcodegen_host.cppс базовой линией той же структуры, аreport.htmlуказывает символической ссылкой на последний запуск. В развитие этого находящийся на рассмотрении #3583 (13 файлов +106/-4390) целиком выносит из основного репозитория реализацию lower trace, специализированную конфигурацию окружения и связанные тесты, оставляя только общий интерфейс инструментирования компилятора, чтобы инструмент трассировки развивался независимо. - Дополнение понижения 16-битной математики CUDA (#3172, 3 файла +463/-8): для asin, acos, asinh, acosh, atanh, log1p, atan2, hypot, copysign, ldexp, nextafter отсутствовали специализированные правила понижения для CUDA, и вызовы float16 и bfloat16 никто не обрабатывал на этапе codegen. Исправление регистрирует их в CUDAMath и добавляет перегрузки для
half_tиbfloat16_t: десять операторов вычисляются в float32 с обратным преобразованием, а nextafter переведён на целочисленное пошаговое сравнение по 16-битному кодированию, чтобы сохранять субнормальные числа bfloat16 при fast math. - Eager-фронтенд сохраняет позиции в исходниках Python (#3558, 4 файла): сгенерированные вызовы циклов отображаются обратно на операторы
for, обёртки контекста — на операторыwith, а также добавлены позиции для распаковки итерируемых аргументов, что исправляет рассинхронизацию traceback и покрытия. - Векторизованное преобразование BF16→FP32 переведено на встроенный PTX (#3595, 4 файла +19/-7): добавлена реализация преобразования пары lane за один раз в f32x2 вместо поштучного скалярного повышения по каждому lane; поддержка всех трёх ширин lane — 2, 4 и 8 — сохранена, семантика не изменена, затронута только последовательность инструкций.
- Pass разворачивания и ROCm Select (#2887): разворачивание циклов больше не устраняет stepped-циклы с trip count 0, а векторизованный
Selectна стороне ROCm понижается по каждому lane, чтобы избежать отказа группового понижения на неподдерживаемых целях. - Разбиение softmax по кластеру из 16 CTA (#2632, смержен 10-18): для таких малострочных длинных строк, как lm-head (4×102400), добавлено новое ядро; старая реализация обменивала
(max, sum)через глобальную память по 58 сегментам на строку и использовала барьер между grid, новая реализация раскладывает одну строку по регистрам кластера из 16 CTA, каждый элемент берёт экспоненту только один раз, а свёртка выполняется по дереву shuffle с приоритетом max между warp, CTA и кластером. - Направления на рассмотрении: помимо двух PTO-изменений, в окне обновились
[Transform] Locate VerifyBufferInit reads outside tile ops(#3620),[Codegen] Add unsigned mulhi intrinsic(#3617),[Transform] Keep assumption checks with local dependencies in scope(#3611),[Transform] Preserve tl.assume predicates that simplify to true(#3610),[CPU] Support clz in C and C host code generation(#3609); исправление смешанных знаковых сдвигов в #3597 и #87 форкаtile-ai/tvm
Парные коммиты, кроме того, #86 переносит исправление области видимости цикла из upstream обратно. В fork на рассмотрении 25 коммитов, в основном репозитории — 163, путь сотрудничества, при котором сторона TIRx действует первой, а основной репозиторий следует за ней, появился на этой неделе во второй раз.
Корректность и исправление дефектов
- 10-16 ~ 10-18 (окно в три дня с понедельника): чистые TMA-производители включены в прямой барьер (#3503, warp-производители с 1 по 3 ждут только барьер обратного давления, могут отставать на две фазы и зависать на переиспользуемом parity, блокируя весь блок); общий буфер родственных конвейеров разворачивается только один раз (#2342, исправлен случай, когда два
T.Pipelinedсовместно используют буфер с разными num_stages, что приводило к срабатыванию ICHECK LayoutInference для четырёхмерного(4,2,64,32)); тройное исправление Profiler (#3559 — захват CUDA Graph между устройствами пуст, #3560 — последующий вызов перезаписывает вывод предыдущего снимка, #3561 — время cache-flush исключено из критерия ранней остановки). - 10-19:
T.cumsumна общем буфере дополняется смещением потока при warp-специализации (#3536, 4 файла +101/-38, в шаблоны scan для CUDA и HIP введёнthread_offset); голые data-переменныеcall_externконсервативно помечаются как записываемые (#2618, добавлено 69 строк тестовых случаев, покрывающих «call_extern записывает выходной буфер», направление — лучше меньше оптимизаций, чем неверная оптимизация). - 10-20: анализ векторизации учитывает ненулевую нижнюю границу цикла (#3579, 10 файлов +818/-198, прежняя реализация неявно предполагала, что цикл начинается с 0; при ненулевой нижней границе векторизация с unit-step вычисляла адреса разных lane как одну группу); обнаружение межпоточного WAW в разделяемой памяти переведено на два экземпляра потоков (#2821, 3 файла +153/-19, прежняя проверка WAW переиспользовала одну переменную потока для двух обращений, из-за чего пропускала нарушения и не вставляла барьеры); для неподдерживаемых MMA tile требуется явное заполнение K (#2818, FP16 K=8 даёт неверный результат, нерегулярные размеры вроде K=20 / 28 сразу падают на этапе вывода раскладки); fragment reduce поддерживает сохранение целевых измерений (#2815, 8 файлов +343/-63); предикаты TIR синхронно переписываются при повышении разрядности целых (#3550, 4 файла +950/-27, добавлен
IndexPredicateRewriter); CuTeDSL scan дополнен смещением участвующих потоков (#3576, 2 файла +30/-6,tl.CumSum1D(32, False, 0)ранее сразу выдавал ошибку параметров конструктора). - 10-21: пакетный
finalize_reducerранее редуцировал только первый выходной блок (#3070, 2 файла +29/-5, при размерности вывода больше batch последующие сегменты получали неинициализированные значения; после исправления эмиссия идёт поблочно поceil(OutputDim / batch), на L40S прошли 23 тестовых случая, внешняя матрица воспроизведения — 16 случаев без расхождений); предварительная проверка трёх комбинаций источник/цель/округление для cast (#3350, helper для f32→E8M0 округляет к плюс бесконечности и вообще не принимает параметр округления, а ветка векторизации никогда не читалаround); CUDA target без arch отклоняется, а не молча заполняетсяsm_50(#2860, 1 файл, исправляет #1049, в ошибке приведены два способа явного указания arch); программный конвейер сохраняет транзитивные зависимости копирования и учитывает домен потоков в определении конфликтов областей (#2822). - 10-22: клонирование analyzer перед переписыванием векторизации (#3612, 1 файл +2/-1); после разбиения параллельного цикла старая привязка analyzer становится недействительной ([#3226](https:/
/github.com/tile-ai/tilelang/pull/3226), 6 файлов +55/-19, затрагивает три pass: loop_partition, loop_vectorize, lower_tile_op); выход за границы буфера-кандидата в top-k селекторе deepseek_v32 (#3280, 2 файла +91/-10, tl_topk_impl помещает radix-кандидатов в фиксированный общий буфер [2, 4096] и не ограничивает размер корзины порога первого раунда, FP32-оценки с одинаковой младшей мантиссой или полностью совпадающие входы приводят к записи за границы и падению с CUDA_ERROR_ILLEGAL_ADDRESS; исправление — выделение глобального workspace (batch, 2, seq_len) на уровне обёртки tl_topk); небиективные формы разреженных метаданных sm8x теперь отклоняются (#3125, один файл +6/-0).
Среда выполнения, CI и инструментальная цепочка
- Задача регрессии производительности закреплена за H100 (#3569, 1 файл +15/-1): организация внедряет собственные размещённые H20 для регулярного CI корректности, их набор меток пересекается с существующим
[self-hosted, nvidia]. FP16-производительность H20 в плотных вычислениях составляет около 148 TFLOPS, что примерно в семь раз меньше примерно 990 TFLOPS у H100; если бы эта машина незаметно забирала benchmark-задачи, каждый benchmark сообщал бы о несуществующей регрессии. Теперьpr-regressionобязан иметь меткуh100и до начала работы проверять, что выделенная карта действительно H100; при ошибке в метке происходит быстрый отказ. - Autotuner передаёт параметры profiler (#3337, 3 строки): warmup, rep, timeout в декораторе ранее не передавались в тюнер, поэтому изменение этих трёх параметров пользователем фактически не действовало. В том же пакете поддерживающих изменений ещё три: печать плавающих констант FP4 (e2m1) на стороне ROCm (#3548, теперь константы генерируются на устройстве через вспомогательную функцию преобразованием из float32), обновление cibuildwheel с 4.2 до 4.3 (#3565), добавление ещё одного ревьюера в линию ROCm (#3567).
- CI Ascend объединяет пошаговые проверки в один check (#3564, 1 файл +61/-9): результаты сборки и тестирования собираются в одну PR-проверку
Test for Ascend; окружение CANN разворачивается только один раз и сборка выполняется один раз, а пример AscendC, пример PTO и модульные тесты Ascend выполняются как три отдельных шага одного job; после сбоя одного набора остальные наборы продолжают выполняться, но итоговый результат всё равно считается неуспешным. - Сайт документации:
tilelang.github.ioза неделю получил 15 автоматических сборок-пушей (с 10-19 по 10-22, все запускаются при слиянии в основной репозиторий); сайт документации TileOPs получил три ручных обновления контента — восемь новых операторов внесены на страницу API (#76), шесть новых операторов внесены (#77), два обратных оператора MLA внесены на страницу Attention (#78, причина —check_api_pages.pyсообщил, что из 207 экспортируемых основным репозиторием операторов отсутствуют две страницы).
Наблюдение за очередью ревью
- Открытые PR в основном репозитории снизились с 167 (по состоянию на 10-21) до 163 (по состоянию на 10-22), в TileOPs — с 16 до 9, репозиторий адаптации Ascend держится на высоком уровне 235–236 — картина «основной репозиторий и библиотека операторов сжимаются, репозиторий адаптации всё ещё толстый» совпадает с прошлой неделей, но снижение TileOPs — самое крупное внутри организации за эту неделю.
- Объём обновлений в окне мониторинга организации: 52 (10-20) → 71 (10-23). Из 51 в состоянии ревью по состоянию основного репозитория на 10-19 27 помечены
[BugFix], сосредоточены в ThreadSync, Transform и codegen — это граничные условия, возвращающиеся после масштабного использования. - Около 11:30 10-20 у 64 PR в состоянии ревью одновременно обновился
updated_at; выборочная проверка трёх из них показала отсутствие комментариев, ревью и событий пуша ветки в соответствующий момент, что было квалифицировано как массовый пересчёт на стороне платформы и не учтено в активности разработки; количество в состоянии ревью определяется по счётчикуis:openкаждого репозитория.
3. Мультибэкендная адаптация (Ascend / Hygon / MetaX / Moore Threads)
Ascend: переход от добавления операторов к обратному распространению обучения и путям данных
- На этой неделе в репозиторий адаптации влито 11 PR: документация на китайском для поэлементных операторов (#1657 — для четырёх операторов relu / leaky_relu / sigmoid / silu дополнены описание функций, параметров, возвращаемых значений и типичного использования, 6 файлов +451/-19),
indexer_bwd(#1887), обратный проход SiTU-GLU (#1877), LSTM (#1892), GRU (#1902), китайская версия бенчмарка CrossEntropy (#1801, по принятому в FA и SFA парному соглашению en/zh), исправление межстрочного расстояния менее 32B (#1795), атомарная публикация JIT-кэша (#1903), пример depthwise_conv_2d (#1915), пример Dilation2D (#1916), а также откат depthwise_conv_2d в тот же день (#1919, причина в сообщении коммита не указана; репозиторий примеров находится в состоянии «один пришёл, один ушёл»). - В основном репозитории 12 изменений, касающихся Ascend:
T.alloc_ss(#3514 — скалярная память, разделяемая одним AIC и двумя AIV на dav-3510, пул SS 3 KiB внутри группы, база с выравниванием 32 байта), сброс состояния RNG (#3331 — предотвращает ошибку bisheng о необъявленном идентификаторе из-за остаточного__asc_rng_stateот соседних ядер), сокращение SimdVF с сохранением только lane 0 (#3437), скалярный sqrt вне домена VF через стандартную математическую библиотеку (#3466), генерация PTO Ramp по типизированным векторам (#3535), явный pitch при локальном копировании L0 (#3511), выравнивание эвристики и epilogue DeepGEMM (#3577, 29 файлов +1392/-1036, охватывает fused bias, Alpha, BF16 stochastic rounding и FP8-квантование для плотных, batch и grouped GEMM), знаковость целых в PTO (#3582 —pto.redux_max/minотвергает типизированные целые, выявляется через uint32-lane ≥ 2^31), частичное копирование UB→L1 для NZ-буферов (#3530), экспоненциальный рост предикатов направления MAD (#3581), выделение локальных переменных SIMT-векторов по lane (#3523), связывание хоста и устройства в msprof (#3321). #3321— структурное дополнение возможностей измерений: ранее профилировщик Ascend мог сообщать только время выполнения ядра на устройстве, соответствия между хост-оператором и ядром не было, и образцы автотюнинга нельзя было отнести к конкретному вызову. Этот PR при сборке определяет заголовок профилирования CANN (совместим с двумя вариантами установки — msprof и profiling; при наличии включается, при отсутствии пропускается, без пользовательского флага компиляции), во время выполнения добавляетascend_profiling.hи модуль профилирования на стороне хоста, сопоставляет по порядку вызовов запуск хост-оператора и выполнение ядра на устройстве; путь групповой компиляции использует ту же отчётность (13 файлов +676/-13).#1795обладает наибольшей технической сложностью: корневая причина на уровне шаблона —copy_ub_to_gmбезусловно генерируетDataCopyPadс множественными burst, тогда как движок MTE3 реализует системное соглашение «узкие строки UB хранятся в слотах по 32B», и адрес источника на каждый burst продвигается наceil(blockLen/32) + srcStrideблоков по 32B. Для производителя, пишущего строки по границам 32B, это точное совпадение, но выходT.reduce_max(M,1)fp32 записывается компактно через V-pipe с межстрочным расстоянием всего 4B, и движок не может это выразить. Исправление сворачивает обе стороны в один flat одиночный burst, когда обе упакованы и суммарный объём не превышает 65535; невыразимые межстрочные расстояния, не кратные 32B, переводятся в явное прерывание черезtrap(); отказ от деградации объясняется тем, что автоматическая межконвейерная синхронизация bisheng покрывает только линейные intrinsics, и оборачиваниеDataCopyPadв условное ветвление заставит bisheng сгенерировать некорректный код синхронизации и привести к зависанию устройства (на практике построчный DMA, обёрнутый в ветвление времени выполнения, вызывает исключение aicore). В описании PR сохранены две границы: компактное межстрочное расстояние менее 32B с назначением, имеющим межстрочное расстояние, по-прежнему идёт пошагово по слотам; приblockCount > 4095(12-битное поле) по-прежнему происходит молчаливое усечение.- Очередь на рассмотрении:
sparse_mla_fwd(#1929 — varlen packed gather случайных строк, онлайн softmax, слияние двух GEMM QK/PV, размещается вexamples/dsa_sparse_finetune/, область применимости fast-пути жёстко зафиксирована: H=128 и G=1, dim/tail 512/64, topk кратен 256) иsparse_mla_bwd(#1928 — цепочка GEMM dQ, векторная цепочка P/dP, scatter случайных строк dKV);indexer_topk_reducesum(#1917); kpool-сжатие GLM-5.3 (#1910); серия WY fast и chunk (#1827 / #1828 / #1802 / #1803 / #1799, явно нацеленная на цепочку обучения линейного внимания и gated delta networks); кроме того, аннотация сохраняемого блока UB→L1 staging и ND-смещение (#1907), исправление публикации кэша параллельных ядер (до вливания #1903), проверка конфигурации автоматической межъядерной синхронизации (#1854), ошибка результата W4A4 int4×int4 в gemm_v0 (#1731).
Hygon: исправление константного окна влито, профилирование производительности перешло в ветку
- #25 влит 20.10 в 09:53 (2 файла +346): после разворачивания цикла повышение ресурсов MLS теряет смещение константного окна, из-за чего последующие обращения попадают в неверный интервал; исправление состоит в том, чтобы перед выбором одноосевого обновления или прямолинейной инкрементальной адресации сначала проверить необновляемое измерение, при необходимости консервативно переинициализировать окно и добавить регрессионное покрытие на существующих тестах MLS. Это единственный влитый коммит основной линии Hygon за неделю, на нём ветка
mainи остановилась. - Три на рассмотрении: #26 обрабатывает разделение warp для fp4 MLS (14 файлов +261/-144), #18 добавляет поддержку конвейера регистров и warp-diverge (в описании указано, что производительность
example_gemmуже близка к rocblas), #19 — изменения, связанные с распределённостью. - Ветка feature даёт воспроизводимые выводы по производительности:
feat/hcu-smls-b-vgprимела три пуша 21.10 в 11:04 и 15:27. Пуш в 11:04 развернул k-loop декодирующего GEMM и вернул тайлы с M>96 к bn96; ключевое суждение автора — «фиксированные накладные расходы на каждом шаге идут от цепочки адресов, а не от barrier» — символический индекс совместного уровня(k+d) % 3опускается доv_mul_lo_u16,v_sub_u16,v_readfirstlane_b32и попадает на путь адресации matrix_load, занимая 13% ядра, тогда какT.Pipelinedи так выдаёт те же два barrier. Пуш в 15:27 приоритетно разбивает средний участок wide-N с M от 64 до 128 по числу блоков, gate_up при M от 64 до 96 принимает bm96/bn128/bk128/ns2 и преобразует документацию декодирующего GEMM из 3825 строк в двухсекционную структуру «результаты + журнал оптимизации» на 588 строк. - 22.10
gcy_merge_mainудаляет переключатель конвейера регистров (6 файлов +10/-24): одновременно изменяются два прохода — внедрение программного конвейера регистров HCU и планирование конвейера, а такжеpipeline_utils.hи расширение loop языкового уровня. Удаление переключателя обычно означает, что путь конвейера регистров уже действует по умолчанию и двухрельсовое сопровождение больше не оправдано, но эти изменения ещё ждут приземления в ветке слияния.
MetaX / Moore Threads (MUSA) / MLIR Ascend: тишина всю неделю
- MetaX: последний пуш остановился на 16.10 (ветка dev
#161вливает main в dev,#160исправляет xfail-кейсы MetaXGPU), релиз по-прежнему на v0.1.14 от 17.09. За всю неделю ни новых коммитов, ни новых тегов. - Moore Threads: последний пуш остановился на 30.09 «Prepare public TileLang MUSA 0.1.15», последний релиз
v0.1.15+musa.1, за всю неделю ноль коммитов, ноль находящихся на рассмотрении. - MLIR Ascend: 19.10 влит #204 с исправлением изоляции TVM, устраняющий взаимное загрязнение между этим репозиторием и пространством имён TVM, видимостью символов; масштаб небольшой, но напрямую влияет на стабильность линковки при сосуществовании нескольких бэкендов; после этого пушей не было.
- Вывод: все изменения бэкендов в этом окне несут две линии — Ascend и Hygon, две другие линии стоят на существующих версиях. Это согласуется с суждением прошлой недели «Moore Threads — единственный бэкенд, не выровненный по v0.1.15», и на этой неделе MetaX также перешёл в тишину.
4. Экосистема и стороны внедрения (TileOPs / TileFoundry / внедряющие)
TileOPs: 68 влитий за неделю, две аппаратные основные линии продвигаются одновременно
- Покрытие: ветка статистики спецификаций организации после 20 слияний за один день 18-10 и 44 слияний за окно обновлена до «реализовано 205/205, бенчмаркировано 205/205» — оба показателя заполнены полностью. Слитые на этой неделе операторы охватывают шесть категорий: внимание, линейное внимание, пространство состояний, свёртки, нормализация и GEMM: уровень оператора обратного прохода prefilling MLA (#2678, совместим с интерфейсом
_flash_attn_backwardиз FA3), специализированное под SM90 warp-ядро обратного прохода MLA (#2680, D_qk=192, D_v=128), постраничный прямой проход MLA (#2642), запись в KV-кэш MLA (#2635), фьюзинг QK-Norm-RoPE (#2639, семь комбинаций строк/точностей, поддержка двух вариантов ротации — NeoX и соседние пары), фьюзинг RMSNorm с остатком при поточной квантизации (#2634, 12 рабочих нагрузок согласованы с одноимённым интерфейсом vLLM), два оператора CausalConv1d (#2627, ширина от 2 до 4, опциональные bias и SiLU), преобразование Hadamard (#2624, base_order 1/12/20/28/40, n до 2^28), выборочное сканирование Mamba-1 (#2638, девять рабочих нагрузок покрывают предзаполнение 4096 токенов и декодирование одного токена для Mamba-2.8B), DSAPaged (#2633, 656-байтовый строчный формат DeepSeek-V3.2 из FlashMLA), постраничный прямой проход GQA FP8 (#2648, все 36 случаев прошли, включая проверки на NaN и Inf), FP32 attention sink для dense GQA (#2515,-infотключает этот sink,+infобнуляет выход соответствующего head). - Специализированные программы SM90 появляются группами: постраничный прямой проход GQA переведён на
GQAPrefillPagedWSKernel(#2668, 8 файлов +901/-103, обслуживает head dim 256 и группы query шириной более 16 голов на одном KV head; неохваченные FP8 размерности 64 и 256 читаются через 16-битное зеркало страницы, разовый лимит 4 GiB); FP8 lightning indexer переведён на два consumer warpgroup, поочерёдно потребляющих 64-key tile (#2666, прежняя реализация за один чистый проход записывала -inf за пределами окна со скоростью 2.5 TB/s, что занимало 425 из 472 микросекунд вchunk-prefill-kscale); декодирование MLA идёт по смещённым качелям (#2665, ключи одного запроса режутся наmin(sm_count // blocks, tiles // 2)сегментов и объединяются через log-sum-exp); персистентность dense prefill (#2706, когда число query tile превышает число SM, один CTA занимает один SM и поочерёдно проходит свои tile; на D64 каждые 192 строки query на tile распределяются между тремя потребителями по 64 строки, перечитывание K/V сокращается на треть); декодирование dense GQA (#2694, producer warp TMA заполняет двухслотовое кольцо K/V); полоса причинного скользящего окна (#2696, один CTA для «query tile, KV head» загружает два key/value tile полосы только один раз); обратный проход GQA напрямую обслуживает сгруппированные KV head (#2685). - SM89 закрывает потребительские и однокарточные сценарии: блочно-масштабируемый групповой GEMM FP8 расширен на SM89 (#2659, четыре явные конфигурации, шесть бенчмарков с копированием, число случаев выросло с 42 до 77), INT8 W8A8 включён на SM89 (#2655, 13 интерфейсных случаев SM89 и 29 нагрузок INT8-бенчмарка прошли проверку корректности против vLLM), тайл по умолчанию для FP8 BMM снижен до 64×64 (#2681, 1×16×64×128 с 5.161 до 3.799 us, 16×128×128×1024 с 12.943 до 7.414 us), верхняя граница M по умолчанию для 64 столбцов W4A16 расширена с 16 до 64 (#2672), постраничный DSA реализован через MMA (#2669, batch 4 / 128 head / 256 позиций — 0.269 ms против 0.727 ms у эталона PyTorch FP32; автор прямо пишет: «на крупных случаях в основном паритет, это не универсальное преимущество»), NSA top-k расширен до 1024–2048 сжатых блоков (#2675) и group48 с переиспользованием tiled-программы (#2674), GEMM «одна строка — один столбец» переведён в векторный (#2660, кандидаты фильтруются по бюджету разделяемой памяти, максимальный staged ring 96 KiB), число уровней конвейера по умолчанию для SSD chunk scan снижено до двух (#2705), разделение диапазона ключей paged DSA (#2691), NSA top-k с tile из 32 столбцов (#2690, медиана GPU busy по восьми случаям снизилась
от 2,1% до 15,0%).
- Устоявшиеся приёмы оптимизации производительности: по четырём линейным линиям внимания GLA, GDN, KDA и DeltaNet в сумме более десяти коммитов, приёмы сошлись к двум — сжать матричные умножения в цепочке chunk до одного на блок (#2626, #2645, #2637, #2625), а также выбирать между групповым решением и одиночным warp в зависимости от числа warp-групп, которые вмещает SM (#2650, в самоописании границей указано «примерно семь warp-групп решения на каждый SM»); кроме того, перекрытие записи плиток пакетного GEMM под первым WGMMA следующей плитки (#2636), свёртка длинных построчных редукций в 512 потоков (#2641), обход деления bf16, когда масштабирующий множитель ровно равен 1 (#2646), приближённая обратная величина для остатка от деления float32 и целочисленного деления вниз (#2652), широковещательная передача предикатов и булевы операнды через 16-байтовые векторные чтения (#2702 поднял шесть сравнений
linear-bias-float32с 0,99 до 1,06, #2697 перевёл полноразмерные операнды бинарного kernel на evict-first чтения). - Два случая NaN и три исправления контрактов: планировщик разделяемой памяти счёл буферы ролей warp активными в разные промежутки времени, из-за чего разместил split handover по адресам кольца key или value, всё ещё заполняемого TMA (#2708, 2 файла +80/-30, возвращает NaN в комбинации «семь одиночных токен-запросов идут перед запросом на 300 токенов, 4099 строк FP8 cache, 48 строк страниц»); при причинном окне плитка настройки 128×64 заставляла последние несколько строк подряд встречать два полностью замаскированных key tile, fast math слил
prev * scale - curr * scaleв FMA, и ошибка округления около 2 в 99-й степени переполнилась в NaN (#2699, исправление — вычитать running maxima до перемасштабирования); в varlen query RoPE при нечётной половине ширины поворота параллелизм не делится на число потоков ветви поворота, из-за чего теряется верхняя граница цикла (#2700, общий путь просто зависает); при autotune подача для постраничного decode давала каждому запросу одну и ту же block table (#2703, на практике тюнер MHA decode наopt-1.3b-b16выбрал block_N 128, то есть холодные 80,0 us, и отказался от 72,5 us, опустившись до 0,994 от flashinfer);ref_programслужит одновременно эталоном корректности и объектом хронометража базовой линии torch, следуя за dtype входа (#2692, GroupNorm и InstanceNorm падали на MTT S5000, исправлено — эталон вычисляется в float32 или шире). - Ночной конвейер и отчёты: #2656 добавил в ночной отчёт колонку «новые операторы» и перевёл чтение исторических элементов данных со старого строкового представления на разбор JSON; в его самоописании отчёт за 10-18 (окно статистики с 10-05 по 10-17) перечисляет 109 улучшений, 6 новых операторов, всего 121 строку, из которых W4A8 GEMM занимает 98 строк. Ветка snapshots на этой неделе сделала два снимка: 10-19 05:41 и 10-20 05:39, после чего критерий ночного отчёта сменился на посуточное продвижение.
- Очередь: на рассмотрении снизилось с 16 коммитов (10-21) до 9 (10-22) — единственный репозиторий в организации в этом окне с заметным снижением числа находящихся на рассмотрении; оба дня с 20 влитыми коммитами (по критериям выпусков 10-21 и 10-23) сопровождались этим сжатием.
TileFoundry: неделя рефакторинга перед 0.0.3
- Релиз: тег 0.0.3 установлен 21.10 в 10:26 (подробности в главных новостях); в README раздел Latest News ещё до 21.10 через #247 был дополнен тремя записями за 10/2026 (релиз 0.0.3, пример префилла Qwen3.8-27B, пример префилла Apple AMX), а две записи за 08/2026 перенесены в свёрнутый список Earlier. В описании коммита указано, что README является длинным описанием для PyPI (
pyproject.tomlсодержитreadme = "README.md"), поэтому анонс должен быть зафиксирован до установки тега. - Структурный рефакторинг: разделение плана хранения и плана выдачи (#243, 39 файлов +2543/-1889: исходные решения о размещении оставлены на уровне анализа, удалена публикация исполняемых псевдонимов, выделены read-only StoragePlan и IssuePlan, а также исправлена проблема размещения разделяемой памяти, которая резервировалась по логическим байтам при разреженной физической раскладке); исправление вехи schedule (#241, 314 файлов +53049/-69314, охватывает M1–M8, миграция двух примеров Qwen, регенерация 31 полной длинной группы и всех 64 коротких файлов TIR); рефакторинг тестов (#246, 51 файл +655/-366: локально и в CI переиспользуются ccache и кэш torch extension, в двух местах тесты переведены на сравнение раскладки MMA с эталоном CuTe, скомпилированным на стороне хоста, вместо рукописных эталонов и тысяч параметризованных случаев).
- Кроссплатформенность ускорителей: добавлена поддержка Apple AMX, и пример префилла Qwen запущен на M2 Pro (#244: включены четыре операции AMX, Copy и Fill могут размещаться в областях ядер Apple и исполнителя AMX, для Qwen3-1.7B и Qwen3.5-4B выполнено префилл-заполнение на 128 токенов, выходные logits конечны, номера следующих токенов — 1813 и 306 соответственно). Это первый в экосистеме TileLang случай, когда пример инференса целой модели вынесен на неускоритель CUDA.
- Моделирование устройств и оценка стоимости: добавлены описания целей архитектуры sm_89 и RTX 6000 Ada с синхронизацией спецификационной документации (#259, 11 файлов +392/-22), моделирование устройств расширено с Hopper на Ada; оценка gmem переведена на основе footprint и запущенной mesh с привязкой к измерениям вызываемой стороны (#258, 74 файла +1128/-553, исправлены #239, #252, #253: ранее при проверке только 40 из 132 CTA under-fill был незаметен); устройство, отказавшееся запускать kernel, теперь обязано выбрасывать ошибку (#256, 7 файлов +69/-11: ранее лаунчер после выдачи kernel никогда не читал статус запуска, и на одном GPU sm_89 тест, скомпилированный под связанную цель sm_90, проявлялся лишь неверными значениями, а
compute-sanitizerпоказывал, чтоcudaLaunchKernelвозвращаетcudaErrorNoKernelImageForDevice).
Адаптеры и дистрибутивы
- TileKernels: репозиторий адаптера DeepSeek на этой неделе без коммитов, последний push остановился на слиянии v2.1.0-release от 14.10 (звёзды с 1991 до 2005). Этот релиз явно требует TileLang 0.1.15, PyTorch 2.13, Ascend 950 NPU и CANN 9.2.0 — это первое жёсткое ограничение нижестоящего проекта на «базу 0.1.15», которое также перекликается с указанием SemiAnalysis о невыпущенности CANN 9.2.0.
- FlashQLA: репозиторий адаптера Qwen также без коммитов, последний push остановился на исправлении SM120 от 14.10 (звёзды с 732 до 737), версия по-прежнему v0.1.3 от 30.09. На стороне адаптеров уже две недели тишина, движущая сила основной линии остаётся внутри организации tile-ai.
- Дистрибутив Sunrise: PR (#9) о выпуске 0.1.15+sunrise.1.2.0 на рассмотрении, подробности в главных новостях. В качестве артефакта поставки он использует wheel бэкенда TANG, что образует иную форму дистрибуции по сравнению с поверхностями поставки CUDA / ROCm / Ascend основного репозитория, и знаменует появление второй формы нижестоящего дистрибутива TileLang.
- TileRT / tilescale / DeepStack: в окне мониторинга во всех трёх репозиториях коммитов не было (последние — 24.09, 25.08 и 05.10 соответственно).
5. Сообщество, руководства и мероприятия
- Появление репозитория с систематизированным учебным курсом на китайском языке:
huandu/tilelang-tutorialсоздан и запушен 20.10, позиционируется как «систематический учебный курс по TileLang на китайском языке от нуля до единицы», охватывает написание операторов, механизмы этапа компиляции, а также два бэкенда — NVIDIA и Ascend. Ранее материалы на китайском ограничивались отдельными блогами и переводами официальной документации; систематизированный учебный репозиторий появился впервые. На той же неделе обновилсяRuneFang/tvm_tilelang_cookbook(34 звезды, пуш 21.10), позиционирующий себя для читателей, «которые немного пишут на Python, слышали про CUDA, но не читали код компилятора», — от@tilelang.jitдо.cubin. - Сообщество CANN открыло репозиторий операторов:
Atlas-Ascend-Fork/ops-tilelangсоздан 20.10, внутри уже есть четыре уровняsrc,tests,scripts,docs, а также файлы спецификаций сообщества OpenAtom, такие какOAT.xml,SECURITY.md; 22.10 запушен коммит с исправлением «переполнение при комбинации легального верхнего зерна и хеша тест-кейса приводит к сбою CPU-теста», в более ранних коммитах есть «замена ссылок на Ascend A5 ссылками на Ascend 950» и «сессии с провалившимся или прерванным benchmark всё равно перезаписывают базовую линию производительности». Репозиторий операторов уровня сообщества с единственным DSL в качестве единственного языка реализации ранее не встречался. - Формирование рабочего процесса agent:
tilelang/agent(создан 28.08, пуш 22.10) оформляет README как исполняемый шаблон промпта — через@tilelang-operator-dev/SKILL.mdвнедряются предметные знания, на входе только имя оператора, эталонная реализация GPU/CPU, shape и ограничения «поставка tilelang npu, поставка на китайском», в комментариях указано, что agent должен выполняться в среде A5 и после загрузки проходить замкнутый цикл из десяти шагов, Skill содержит дерево решений по выбору, правила 8-CSV, стратегии от L0 до L4 и 11 подводных камней. Кроме того,cc-c122/TileLang-Remote-Autotuning-Agent(1 звезда, пуши и 21.10, и 22.10) также превращает автоматическую настройку в agent с возможностью удалённого управления. - Эксперименты с бэкендами и инструментальная цепочка:
SoilSoi1/tilelang-hexagonсоздан 20.10 — это общественный эксперимент с бэкендом Hexagon, перекликающийся с находящимся на рассмотрении в основном репозитории #2155;PTO-ISA/tilelangGym(создан 14.10, пуш 20.10) используется для тестирования чувствительности производительности различных benchmark и микробенчмарков при PTO lowering;easy-tilelang/tilelang-devkit-vscode(создан 19.10, пуш 20.10) позиционируется как инструмент для исследования lowering pass, различий IR и компиляции CPU C JIT в VS Code, что согласуется с направлением основного репозитория по полному выносу lower trace (#3583). - Сторонние небольшие репозитории:
fanyuxiao-ui/w4a16-tilelang(создан 10.10, использует TileLang плюс рукописный CUDA для GEMM и GEMV квантизованного вывода W4A16 на A800),sablin39/tilelang-cuda-skills(145–146 звёзд, автор одновременно является активным контрибьютором TileFoundry),localizethedocs/tilelang-docs-l10n(локализация официальной документации),flytiger-eco/tilelang-wrapper-for-sail(создан 21.10, пуш 22.10, название репозитория указывает на предоставление обёртки TileLang для SAIL, без описания и README),chaigua/tilelang-agent(создан 19.10). Все являются инициативой сообщества, а не официальными репозиториями организаций. - Медиа и академическая сфера: запросы Google News на китайском и английском в окне 19.10 дали ноль новых результатов, в окне 20.10 — три совпадения (две отраслевые публикации о DeepSeek и чипах Huawei, один пресс-релиз prime-rl 0.10.0; при построчной проверке конкретных фактов о TileLang не найдено, обработаны как косвенно связанные), в окне 22.10 — три статьи о взаимодействии Huawei-DeepSeek, при этом только у SemiAnalysis есть специальный раздел о TileLang, в окне 23.10 — две статьи являются медиа-перепечатками одного и того же отчёта, ещё одна о финансировании DeepSeek не относится к теме и исключена. На Hacker News за всю неделю обсуждений не было; в arXiv по запросу с TileLang в заголовке или аннотации в окне мониторинга 0 записей, ближайшая релевантная запись — по-прежнему TileSight от 24.07.
6. Наблюдения за тенденциями
- Уровни повышения корректности последовательно усложняются, а не повторяются на одном уровне: на прошлой неделе основной репозиторий очищал «проверку форм и геометрии», а три сегмента этой недели различны — сначала геометрия и барьеры warp-специализации и конвейера (#3503, #2342, #3536, #2822), затем тихие числовые ошибки (#2818, #2815, #3550, #3070, #3350, #2860, #3125) и, наконец, согласованность состояния на этапе компиляции (#3579, #3612, #3226). Третий сегмент заслуживает наибольшего внимания: ядра, порождаемые такими дефектами, могут оставаться корректными, но компилятор говорит пользователю одно, а делает другое; TileLang внедряет автоматическое написание ядер агентом, и самосогласованность состояния на этапе компиляции напрямую определит, сможет ли цикл итераций агента сойтись.
- Узким местом на стороне Ascend стало не количество операторов, а модель памяти, границы среды выполнения и обратный проход обучения: из 11 коммитов в репозиторий адаптации на этой неделе пять приходятся на обратные и рекурсивные операторы (indexer_bwd, обратный проход SiTU-GLU, LSTM, GRU, документация CrossEntropy); крупнейший коммит в основном репозитории — выражение шага строк UB→L1 для NZ-раскладки (#3530, 18 файлов), а наибольшая техническая плотность — у невозможности выразить компактный шаг строк менее 32B, что требует явной остановки (#1795). Вместе с атомарной публикацией JIT-кэша (#1903) и экспоненциальным ростом предикатов PTO (#3581) тема этой линии — «сделать так, чтобы существующие операторы не давали сбоев в граничных условиях». В сочетании с тем, что сообщество CANN заводит отдельный репозиторий операторов ops-tilelang, читается разделение труда: активы операторов несёт репозиторий сообщества, а основной репозиторий сосредоточен на семантике бэкенда и codegen.
- SM89 и SM90 становятся двумя параллельными аппаратными магистралями, а критерий приоритизации смещается от пиковой производительности к доступности: направление SM90 на этой неделе дало шесть warp-специализированных ядер, а направление SM89 одновременно продвигает шесть путей — блочное масштабирование FP8, INT8 W8A8, FP8 BMM, W4A16, постраничный DSA, NSA top-k, — причём PR обычно сопровождаются измерением на одной карте и явно указывают «не претендуем на результаты работы SM90» и «на крупных сценариях в основном паритет, всеобъемлющего преимущества нет». Видеокарты уровня Ada (L40S, 4090 и подобные) — основное железо в руках отечественных разработчиков, и эта ориентация как раз дополняет отмеченное SemiAnalysis: «оптимизация в основном нацелена на суперузлы, универсальность отстаёт от производительности».
- На уровне экосистемы организационных действий больше, чем кода: у основного репозитория на этой неделе нет релизов и breaking change, но вне организации появились репозиторий системных руководств на китайском, репозиторий операторов сообщества CANN, рабочий процесс agent SKILL, эксперимент с бэкендом Hexagon, расширение VS Code и репозиторий-обёртка SAIL; внутри организации — планирование агентов в TileFoundry 0.0.3, вторая форма дистрибуции Sunrise, полный набор спецификаций TileOPs. Если смотреть на три вещи вместе — «правила пишет человек, агент занимается тюнингом, в репозитории оседают базовые линии», — инженерное разделение труда на стороне Ascend и в TileLang в целом перестраивается, а сам темп кода спокоен.
- Аналитические агентства начинают использовать TileLang как критерий доступности Ascend: SemiAnalysis определяет степень завершённости поддержки Ascend для DeepSeek через «из шести репозиториев только TileLang тогда работал», и это лучше любого отдельного технического блога показывает место TileLang в нарративе отечественных вычислительных мощностей — от экспериментального DSL до слоя по умолчанию. Тот же отчёт даёт и обратный сигнал: оптимизация сосредоточена на суперузлах, поддержка x86-хостов всё ещё неполна, между производительностью и универсальностью есть заметный компромисс. Пересказ SCMP показывает, что это суждение входит в мейнстримную медийную повестку.
- На что обратить внимание в следующем выпуске: выйдет ли v0.1.16 основного репозитория (тишина уже 23 дня); удастся ли снять блокировку 0.1.12 в TileOPs (после закрытия #2554 нового варианта решения не видно, двухбазовостная проверка по-прежнему остаётся шлюзом); удастся ли влить #3512 и #3516 в PTO (это решает, станет ли PTO бэкендом выполнения по умолчанию); будут ли исправлены в следующей версии отсутствие заголовочных файлов в wheel TileFoundry 0.0.3 и проблема ценообразования в #239; как поступить со сбоем S2 wheel Sunrise в
tangGetDeviceCount; темп внедрения прямого и обратного проходаsparse_mlaна Ascend (#1929 / #1928) и kpool GLM-5.3 (#1910); когда в main попадёт очистка переключателя регистрового конвейераgcy_merge_mainна Hygon.
Приложение: материалы и пояснения к проверке
- Материалы: 5 выпусков ежедневного отчёта о динамике сообщества TileLang (10-19, 10-20, 10-21, 10-22, 10-23), суммарное окно сбора пяти выпусков — с 10-16 07:00 по 10-23 07:00 (пекинское время). Выпуск за 10-19 охватывает трёхдневное окно понедельника — с 10-16 07:00 по 10-19 07:00, в основном события выходных с 10-16 по 10-18; в настоящем отчёте они включены как фон и не учитываются в статистике слияний за текущую неделю; четыре выпуска с 10-20 по 10-23 строго попадают в текущую неделю.
- Критерии учёта слияний: за неделю слито 129 коммитов; по критериям четырёх ежедневных выпусков — 36 (выпуск 10-20), 26 (10-21), 32 (10-22), 35 (10-23); распределение по репозиториям: основной репозиторий tilelang — 37, TileOPs — 68, репозиторий адаптации Ascend — 11, TileFoundry — 8, Hygon — 1, MLIR Ascend — 1, сайт документации — 3. В выпуске 10-19 дополнительно 61 коммит, относящийся к окну выходных с 10-16 по 10-18, в вышеприведённую таблицу не включён.
- Дополнительная проверка: организация-уровневая проверка в 168-часовом окне подтвердила, что из 29 репозиториев tile-ai в окне были пуши в 11 (TileOPs, tilelang, tilelang-ascend, tilelang-hygon, tilelang-mlir-ascend, tilelang-sunrise, TileFoundry, сайт документации TileFoundry, сайт документации TileOPs, сайт документации tilelang, TileOPs-nightly), что согласуется с порепозиторными выводами каждого ежедневного выпуска; организационная динамика после 07:00 пятницы по установившейся практике включается в следующий ежедневный выпуск, настоящий отчёт её содержание не прогнозирует.
- Критерии и границы: все данные о производительности — самозаявления из описаний PR или примечаний к релизам (H100, H200, L40S, M2 Pro, 910B3, MTT S5000 и др.); настоящее издание не располагает соответствующим оборудованием и не проводило независимого воспроизведения; покрытие спецификаций и бенчмарков 205/205 взято из данных бейджа статистической ветки организации и является самозаявлением проекта; время публикации сверено по тегам и страницам релизов соответствующих репозиториев, страницы релизов и продвижение веток репозиториев адаптации могут запаздывать; суждения SemiAnalysis и SCMP являются сторонним анализом, а не официальными заявлениями производителей. Количество находящихся на рассмотрении PR в разных выпусках учитывается по не полностью совпадающим критериям (в одних берётся общее число
is:openрепозитория, в других — число обновлённых в окне), при цитировании это отмечено в тексте. - Предлагаемый период следующего выпуска: 2026-10-26 ~ 2026-10-30.
Таблица проверки источников
| Источник | Результат проверки |
|---|---|
| Организация tile-ai (29 репозиториев) | В 168-часовом окне пуши были в 11 репозиториях; по критериям четырёх выпусков текущей недели слито 129 коммитов, обновлено в окне рассмотрения от 52 до 71 |
| Основной репозиторий tilelang | За неделю слито 37 коммитов; открытых PR снизилось с 167 до 163; VERSION по-прежнему 0.1.15, за всю неделю нет новых тегов и релизов (тишина уже 23 дня) |
| TileOPs | За неделю слито 68 коммитов (плюс 44 в окне выходных); на рассмотрении снизилось с 16 до 9; покрытие спецификаций и бенчмарков заявлено 205/205; по-прежнему закреплён tilelang 0.1.12 |
| TileOPs-nightly | Два снимка ветки snapshots: 10-19 05:41 и 10-20 05:39; в отчёт добавлена колонка «новые операторы» |
| TileFoundry | За неделю слито 8 коммитов; v0.0.3 выпущен 10-21 10:26 (единственная новая версия за неделю); на рассмотрении от 1 до 4 |
| Ascend (tilelang-ascend + изменения Ascend в основном репозитории) | В репозитории адаптации слито 11 коммитов, на рассмотрении более 11; в основном репозитории слито 12 коммитов, связанных с Ascend; прямой и обратный проход sparse_mla на рассмотрении |
| Hygon (tilelang-hygon) | В main слит 1 коммит (#25); на рассмотрении 3; три пуша в feature-ветку дали локализацию цепочки адресов для декодирующего GEMM |
| MetaX / Moore Threads / MLIR Ascend | В окне во всех трёх репозиториях нет коммитов, они остановились на 10-16 / 09-30 / 10-19 соответственно |
| Sunrise | PR релиза 0.1.15+sunrise.1.2.0 (#9) на рассмотрении; после установки wheel S2 import падает на tangGetDeviceCount |
| Потребители (TileKernels / FlashQLA) | Оба остановились на 10-14, за всю неделю нет коммитов; требования к версиям по-прежнему указывают на TileLang 0.1.15 и CANN 9.2.0 |
| TileRT / tilescale / DeepStack | В окне пушей нет (последние 09-24, 08-25, 10-05 соответственно) |
| Сообщество и сторонние репозитории | 4 новых репозитория (tilelang-tutorial, ops-tilelang, tilelang-hexagon, tilelang-wrapper-for-sail), более 5 активных (cookbook, devkit-vscode, tilelangGym, w4a16-tilelang, tilelang-cuda-skills) |
| СМИ и академическая сфера | В Google News по нескольким группам запросов на китайском и английском в окне всего 6 совпадений, только у SemiAnalysis есть специальный раздел о TileLang, остальное — перепечатки или косвенно related; в Hacker News обсуждений нет; в arXiv за окно 0 записей |
Основные ссылки
- Примечания к выпуску TileFoundry v0.0.3 — https://github.com/tile-ai/TileFoundry/releases/tag/v0.0.3
- SemiAnalysis «The Huawei-DeepSeek Symbiosis» — https://newsletter.semianalysis.com/p/huawei-deepseek
- SCMP перепечатал отчёт SemiAnalysis — https://www.scmp.com/tech/tech-war/article/3371806/jensens-nightmare-huawei-deepseek-narrow-ai-chip-ecosystem-gap-nvidia-report
- Основной репозиторий: прямой барьер производителя чистого TMA (#3503) — https://github.com/tile-ai/tilelang/pull/3503
- Основной репозиторий: разделяемый буфер братского конвейера (#2342) — https://github.com/tile-ai/tilelang/pull/2342
- Основной репозиторий: смещение потока T.cumsum разделяемого буфера (#3536) — https://github.com/tile-ai/tilelang/pull/3536
- Основной репозиторий: транзитивные зависимости программного конвейера (#2822) — https://github.com/tile-ai/tilelang/pull/2822
- Основной репозиторий: анализ векторизации с учётом ненулевой нижней границы цикла (#3579) — https://github.com/tile-ai/tilelang/pull/3579
- Основной репозиторий: обнаружение межпоточного WAW для разделяемой памяти (#2821) — https://github.com/tile-ai/tilelang/pull/2821
- Основной репозиторий: явное заполнение K для MMA tile (#2818) — https://github.com/tile-ai/tilelang/pull/2818
- Основной репозиторий: сохранение размерностей в fragment reduce (#2815) — https://github.com/tile-ai/tilelang/pull/2815
- Основной репозиторий: предикат TIR с повышением разрядности (#3550) — https://github.com/tile-ai/tilelang/pull/3550
- Основной репозиторий: пакетный finalize_reducer (#3070) — https://github.com/tile-ai/tilelang/pull/3070
- Основной репозиторий: предварительная проверка трёх комбинаций cast (#3350) — https://github.com/tile-ai/tilelang/pull/3350
- Основной репозиторий: отклонение CUDA target без arch (#2860) — https://github.com/tile-ai/tilelang/pull/2860
- Основной репозиторий: выход за границы top-k в deepseek_v32 (#3280) — https://github.com/tile-ai/tilelang/pull/3280
- Основной репозиторий: клонирование analyzer перед векторизацией (#3612) — https://github.com/tile-ai/tilelang/pull/3612
- Основной репозиторий: привязка analyzer после разбиения параллельного цикла (#3226) — https://github.com/tile-ai/tilelang/pull/3226
- Основной репозиторий: поддержка Windows ARM64 (#2962) — https://github.com/tile-ai/tilelang/pull/2962
- Основной репозиторий: разделение lower trace на хост и устройство (#3496) — https://github.com/tile-ai/tilelang/pull/3496
- Основной репозиторий: понижение 16-битной математики CUDA (#3172) — https://github.com/tile-ai/tilelang/pull/3172
- Основной репозиторий: фиксация регрессии производительности на H100 (#3569) — https://github.com/tile-ai/tilelang/pull/3569
- Основной репозиторий: корреляция msprof для Ascend (#3321) — https://github.com/tile-ai/tilelang/pull/3321
- Основной репозиторий: явный pitch для локального копирования L0 на Ascend (#3511) — https://github.com/tile-ai/tilelang/pull/3511
- Основной репозиторий: частичное копирование UB→L1 для NZ-буфера Ascend (#3530) — https://github.com/tile-ai/tilelang/pull/3530
- Основной репозиторий: эвристика и epilogue Ascend DeepGEMM (#3577) — https://github.com/tile-ai/tilelang/pull/3577
-
Основной репозиторий: фреймворк векторизации PTO (#3512, на рассмотрении) — <https://github.com/
- главный репозиторий PTO tvm_ffi бэкенд выполнения (#3516, на рассмотрении) — https://github.com/tile-ai/tilelang/pull/3516
- репозиторий Ascend исправление межстрочного интервала суб-32B (#1795) — https://github.com/tile-ai/tilelang-ascend/pull/1795
- репозиторий Ascend атомарная публикация JIT-кэша (#1903) — https://github.com/tile-ai/tilelang-ascend/pull/1903
- репозиторий Ascend indexer_bwd (#1887) — https://github.com/tile-ai/tilelang-ascend/pull/1887
- репозиторий Ascend обратный проход SiTU-GLU (#1877) — https://github.com/tile-ai/tilelang-ascend/pull/1877
- репозиторий Ascend cann-bench LSTM (#1892) — https://github.com/tile-ai/tilelang-ascend/pull/1892
- репозиторий Ascend cann-bench GRU (#1902) — https://github.com/tile-ai/tilelang-ascend/pull/1902
- репозиторий Ascend sparse_mla_fwd (#1929, на рассмотрении) — https://github.com/tile-ai/tilelang-ascend/pull/1929
- репозиторий Ascend sparse_mla_bwd (#1928, на рассмотрении) — https://github.com/tile-ai/tilelang-ascend/pull/1928
- Hygon константа окна MLS K (#25) — https://github.com/tile-ai/tilelang-hygon/pull/25
- Hygon ветка профилирования производительности декодирующего GEMM — https://github.com/tile-ai/tilelang-hygon/tree/feat/hcu-smls-b-vgpr
- MLIR исправление изоляции TVM для Ascend (#204) — https://github.com/tile-ai/tilelang-mlir-ascend/pull/204
- TileOPs warp-специализация постраничного GQA (#2668) — https://github.com/tile-ai/TileOPs/pull/2668
- TileOPs FP8 lightning indexer (#2666) — https://github.com/tile-ai/TileOPs/pull/2666
- TileOPs MLA декодирование «качели» (#2665) — https://github.com/tile-ai/TileOPs/pull/2665
- TileOPs SM89 блочно-масштабируемый FP8 групповой GEMM (#2659) — https://github.com/tile-ai/TileOPs/pull/2659
- TileOPs SM89 INT8 W8A8 (#2655) — https://github.com/tile-ai/TileOPs/pull/2655
- TileOPs SM89 FP8 BMM тайлы (#2681) — https://github.com/tile-ai/TileOPs/pull/2681
- TileOPs SM89 W4A16 M64 (#2672) — https://github.com/tile-ai/TileOPs/pull/2672
- TileOPs уровень оператора обратного прохода префилла MLA (#2678) — https://github.com/tile-ai/TileOPs/pull/2678
- TileOPs обратный проход MLA ядро SM90 (#2680) — https://github.com/tile-ai/TileOPs/pull/2680
- TileOPs Mamba-1 выборочное сканирование (#2638) — https://github.com/tile-ai/TileOPs/pull/2638
- TileOPs attention sink (#2515) — https://github.com/tile-ai/TileOPs/pull/2515
- TileOPs FP8 постраничное перекрытие разделяемой памяти (#2708) — https://github.com/tile-ai/TileOPs/pull/2708
- TileOPs переполнение FMA в masked softmax (#2699) — https://github.com/tile-ai/TileOPs/pull/2699
- TileOPs эталонная реализация переведена на float32 (#2692) — https://github.com/tile-ai/TileOPs/pull/2692
- TileOPs ветка статистики спецификаций
— https://github.com/tile-ai/TileOPs/tree/stats
- TileFoundry: разделение хранения и плана запуска (#243) — https://github.com/tile-ai/TileFoundry/pull/243
- TileFoundry: примеры Apple AMX и Qwen (#244) — https://github.com/tile-ai/TileFoundry/pull/244
- TileFoundry: sm_89 и RTX 6000 Ada (#259) — https://github.com/tile-ai/TileFoundry/pull/259
- TileFoundry: выброс ошибки при неудачном запуске (#256) — https://github.com/tile-ai/TileFoundry/pull/256
- PR релиза Sunrise 0.1.15+sunrise.1.2.0 (#9) — https://github.com/tile-ai/tilelang-sunrise/pull/9
- Принявший проект TileKernels — https://github.com/deepseek-ai/TileKernels
- Принявший проект FlashQLA — https://github.com/QwenLM/FlashQLA
- Репозиторий операторов ops-tilelang сообщества CANN — https://github.com/Atlas-Ascend-Fork/ops-tilelang
- Систематический учебник на китайском языке tilelang-tutorial — https://github.com/huandu/tilelang-tutorial
- Навык оптимизации операторов tilelang/agent — https://github.com/tilelang/agent
- TileLang Cookbook — https://github.com/RuneFang/tvm_tilelang_cookbook
- Эксперимент сообщества по бэкенду Hexagon — https://github.com/SoilSoi1/tilelang-hexagon
Источники данных: ежедневный отчёт о динамике сообщества TileLang (пять выпусков с 2026-10-19 по 2026-10-23) и проверка фактическими измерениями в этом цикле; период отчёта — с 19 по 23 октября 2026 года.