[Refactor] Split rotary_embedding.py into a modular package#19144
[Refactor] Split rotary_embedding.py into a modular package#19144
Conversation
Summary of ChangesHello @BBuf, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the architecture of the rotary embedding implementation by decomposing a single, large file into a well-structured Python package. This reorganization aims to streamline development, making it simpler to manage and expand the diverse range of rotary positional embedding techniques and their multimodal extensions. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
|
/tag-and-rerun-ci |
There was a problem hiding this comment.
Code Review
The refactor successfully modularizes the large rotary_embedding.py file into a package, which significantly improves the maintainability and readability of the codebase. The separation into base, factory, multimodal, and specialized modules is a great step forward. However, there are a few issues introduced by the split, most notably a leaky abstraction in the base RotaryEmbedding class which now depends on multimodal-specific attributes defined in subclasses. There are also some performance concerns regarding buffer management and device movements inside forward passes, and some inconsistencies in the factory functions.
…project#19144) PR sgl-project#19144 split rotary_embedding.py into a package and renamed the yarn helper functions (removed leading underscores, renamed _yarn_get_mscale to yarn_get_mscale_simple). The Grok model (grok.py) imports the old names, causing an ImportError that prevents Grok1ForCausalLM from being registered, which crashes both Grok1 and Grok2 tests. Re-export the old underscore-prefixed names as aliases in __init__.py for backward compatibility.
…o xverse_moe * 'xverse_moe' of https://github.com/xiaobaicxy/sglang: (275 commits) fix: add missing blank line after docstring in serving_transcription.py (sgl-project#19206) Whisper model support & `/v1/audio/transcriptions` endpoint & benchmark (sgl-project#16983) fix: patch docker image fixes (sgl-project#19100) [PD-Disagg] Unify prefill info data transition flow, all with `PrefillServerInfo` (sgl-project#19195) [CI] Tiny enhance the dp attention load blance benchmark (sgl-project#19194) add new ci user (sgl-project#19133) [CI] fix the teardown output of disaggregation test (sgl-project#19193) [PD-Disagg] Support query dp rank from bootstrap server. (sgl-project#19168) [Kernel Slimming] Migrate AWQ marlin repack kernel to JIT (sgl-project#18949) [Diffusion] Match rotary_embedding module name style (sgl-project#19179) [Refactor] Split rotary_embedding.py into a modular package (sgl-project#19144) [NPU] bump sgl-kernel-npu to 2026.02.01.post2 (sgl-project#19178) Use single mma warp group for short q_len in FA to optimize decoding performance (sgl-project#18985) Reorganize topk logic to clean up code and expose logical experts (sgl-project#16945) [ROCm] Use unreg path for custom all-reduce during CUDA graph capture (sgl-project#19162) [diffusion] feat: detect Flux2 custom VAE path from component_paths (sgl-project#19170) [AMD] ENV flags tuning and cleanup (sgl-project#19176) Fix bench_one_batch_server by moving the print statements (sgl-project#19175) Update rocm7.2 Dockerfile to install amdsmi for QuickReduce Initialization (sgl-project#19091) Revert "Refactor graph input buffers (sgl-project#18991)" (sgl-project#19173) ...
Motivation
Follow #19064
rotary_embedding.pyhad grown to ~3,800 lines, mixing utilities, base classes, a dozen RoPE variants, Triton kernels, multimodal indexing logic, and factory functions all in a single file. This made it hard to navigate, review, and extend.I mainly use claude4.6 to refactor and do some structure guide for it. Thanks for @DarkSharpness advices.
Changes
Replaced
rotary_embedding.pywith arotary_embedding/package split intofocused modules:
Replaced
rotary_embedding.pywith arotary_embedding/package split intofocused modules:
utils.py: Low-level helpers includingrotate_neox,rotate_gptj,apply_rotary_emb, andapply_rotary_pos_embvariants.base.py: CoreRotaryEmbeddingclass andLinearScalingRotaryEmbedding.yarn.py: YaRN helper functions andYaRNScalingRotaryEmbedding.rope_variant.py: Scaling variants includingPhi3LongRoPEScaledRotaryEmbedding,FourierRotaryEmbedding,DeepseekScalingRotaryEmbedding,Llama3RotaryEmbedding,Llama4VisionRotaryEmbedding,DynamicNTKScalingRotaryEmbedding,DynamicNTKAlphaRotaryEmbedding, andDualChunkRotaryEmbedding.triton_kernels.py: Triton JIT kernels and their Python wrappers for multimodalRoPE (
triton_mrope_fused,triton_ernie45_rope_fused_inplace).mrope.py: Multimodal RoPE classes (MRotaryEmbedding,YaRNScalingMRotaryEmbedding,Ernie4_5_VLRotaryEmbedding) andapply_interleaved_rope.mrope_rope_index.py: Position index generation for multimodal models,including
get_rope_index,get_rope_index_qwen3_omni,get_rope_index_glm4v,and
get_rope_index_ernie45.factory.py: Factory functionsget_rope,get_rope_cpu, andget_rope_wrapperfor constructing RoPE instances.__init__.py: Public API re-exports as a drop-in replacement for the old module.Modifications
Accuracy Tests
Benchmarking and Profiling
Checklist
Review Process
/tag-run-ci-label,/rerun-failed-ci,/tag-and-rerun-ci