liger-kernel-nightly 0.5.3.dev20250218225514__tar.gz → 0.5.3.dev20250219232423__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/PKG-INFO +1 -1
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/pyproject.toml +1 -1
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/__init__.py +1 -0
- liger_kernel_nightly-0.5.3.dev20250219232423/src/liger_kernel/chunked_loss/fused_linear_rlhf.py +213 -0
- liger_kernel_nightly-0.5.3.dev20250219232423/src/liger_kernel/chunked_loss/grpo_loss.py +160 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel_nightly.egg-info/PKG-INFO +1 -1
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel_nightly.egg-info/SOURCES.txt +3 -0
- liger_kernel_nightly-0.5.3.dev20250219232423/test/chunked_loss/test_grpo_loss.py +275 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/pull_request_template.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/workflows/amd-ci.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/workflows/docs.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/workflows/intel-ci.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/workflows/nvi-ci.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/workflows/publish-nightly.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.github/workflows/publish-release.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/.gitignore +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/LICENSE +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/Makefile +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/NOTICE +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/README.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/README.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/benchmarks_visualizer.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/data/all_benchmark_data.csv +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_cpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_distill_jsd_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_dpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_embedding.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_fused_linear_cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_fused_linear_jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_geglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_group_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_kl_div.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_kto_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_layer_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_orpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_qwen2vl_mrope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_rms_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_rope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_simpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/benchmark_swiglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/benchmark/scripts/utils.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/dev/fmt-requirements.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/dev/modal/tests.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/dev/modal/tests_bwd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/Examples.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/Getting-Started.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/High-Level-APIs.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/Low-Level-APIs.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/acknowledgement.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/contributing.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/banner.GIF +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/compose.gif +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/e2e-memory.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/e2e-tps.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/logo-banner.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/patch.gif +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/images/post-training.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/index.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/docs/license.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/alignment/accelerate_config.yaml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/alignment/run_orpo.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/README.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/callback.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/config/fsdp_config.json +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/img/gemma_7b_mem.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/img/gemma_7b_tp.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/img/llama_mem_alloc.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/img/llama_tps.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/img/qwen_mem_alloc.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/img/qwen_tps.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/launch_on_modal.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/requirements.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/run_benchmarks.sh +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/run_gemma.sh +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/run_llama.sh +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/run_qwen.sh +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/run_qwen2_vl.sh +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/training.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/huggingface/training_multimodal.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/lightning/README.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/lightning/requirements.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/lightning/training.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/README.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/callback.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Memory_Stage1_num_head_3.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Memory_Stage1_num_head_5.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Memory_Stage2_num_head_3.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Memory_Stage2_num_head_5.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Throughput_Stage1_num_head_3.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Throughput_Stage1_num_head_5.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Throughput_Stage2_num_head_3.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/docs/images/Throughput_Stage2_num_head_5.png +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/fsdp/acc-fsdp.conf +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/medusa_util.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/requirements.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/scripts/llama3_8b_medusa.sh +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/examples/medusa/train.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/licenses/LICENSE-Apache-2.0 +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/licenses/LICENSE-MIT-AutoAWQ +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/licenses/LICENSE-MIT-Efficient-Cross-Entropy +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/licenses/LICENSE-MIT-llmc +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/licenses/LICENSE-MIT-triton +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/mkdocs.yml +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/setup.cfg +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/setup.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/README.md +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/cpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/dpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/functional.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/fused_linear_distillation.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/fused_linear_preference.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/fused_linear_unpaired_preference.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/jsd_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/kto_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/orpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/chunked_loss/simpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/env_report.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/experimental/embedding.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/experimental/mm_int8int2.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/fused_linear_cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/fused_linear_jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/geglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/group_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/kl_div.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/layer_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/qwen2vl_mrope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/rms_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/rope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/swiglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/ops/utils.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/auto_model.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/experimental/embedding.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/functional.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/fused_linear_cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/fused_linear_jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/geglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/group_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/kl_div.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/layer_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/gemma.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/gemma2.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/llama.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/mistral.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/mixtral.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/mllama.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/phi3.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/qwen2.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/model/qwen2_vl.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/monkey_patch.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/qwen2vl_mrope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/rms_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/rope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/swiglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/trainer/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/trainer/orpo_trainer.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/transformers/trainer_integration.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/triton/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/triton/monkey_patch.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel/utils.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel_nightly.egg-info/dependency_links.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel_nightly.egg-info/requires.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/src/liger_kernel_nightly.egg-info/top_level.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/test_cpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/test_dpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/test_jsd_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/test_kto_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/test_orpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/chunked_loss/test_simpo_loss.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/conftest.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/bf16/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/bf16/test_mini_models.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/bf16/test_mini_models_multimodal.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/bf16/test_mini_models_with_logits.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/fp32/__init__.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/fp32/test_mini_models.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/fp32/test_mini_models_multimodal.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/convergence/fp32/test_mini_models_with_logits.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/fake_configs/Qwen/Qwen2-VL-7B-Instruct/tokenizer_config.json +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/fake_configs/meta-llama/Llama-3.2-11B-Vision-Instruct/tokenizer_config.json +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/scripts/generate_tokenized_dataset.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/tiny_shakespeare.txt +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/tiny_shakespeare_tokenized/data-00000-of-00001.arrow +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/tiny_shakespeare_tokenized/dataset_info.json +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/resources/tiny_shakespeare_tokenized/state.json +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_auto_model.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_embedding.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_fused_linear_cross_entropy.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_fused_linear_jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_geglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_group_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_jsd.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_kl_div.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_layer_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_mm_int8int2.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_monkey_patch.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_qwen2vl_mrope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_rms_norm.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_rope.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_swiglu.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_trainer_integration.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/transformers/test_transformers.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/triton/test_triton_monkey_patch.py +0 -0
- {liger_kernel_nightly-0.5.3.dev20250218225514 → liger_kernel_nightly-0.5.3.dev20250219232423}/test/utils.py +0 -0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "liger_kernel_nightly"
|
7
|
-
version = "0.5.3.
|
7
|
+
version = "0.5.3.dev20250219232423"
|
8
8
|
description = "Efficient Triton kernels for LLM Training"
|
9
9
|
urls = { "Homepage" = "https://github.com/linkedin/Liger-Kernel" }
|
10
10
|
readme = { file = "README.md", content-type = "text/markdown" }
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from liger_kernel.chunked_loss.cpo_loss import LigerFusedLinearCPOLoss # noqa: F401
|
2
2
|
from liger_kernel.chunked_loss.dpo_loss import LigerFusedLinearDPOLoss # noqa: F401
|
3
|
+
from liger_kernel.chunked_loss.grpo_loss import LigerFusedLinearGRPOLoss # noqa: F401
|
3
4
|
from liger_kernel.chunked_loss.jsd_loss import LigerFusedLinearJSDLoss # noqa: F401
|
4
5
|
from liger_kernel.chunked_loss.kto_loss import LigerFusedLinearKTOLoss # noqa: F401
|
5
6
|
from liger_kernel.chunked_loss.orpo_loss import LigerFusedLinearORPOLoss # noqa: F401
|
liger_kernel_nightly-0.5.3.dev20250219232423/src/liger_kernel/chunked_loss/fused_linear_rlhf.py
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
from functools import partial
|
2
|
+
|
3
|
+
import torch
|
4
|
+
import torch.nn.functional as F
|
5
|
+
|
6
|
+
|
7
|
+
class LigerFusedLinearRLHFBase(torch.autograd.Function):
|
8
|
+
@staticmethod
|
9
|
+
def forward(
|
10
|
+
ctx,
|
11
|
+
_input,
|
12
|
+
weight,
|
13
|
+
attention_mask,
|
14
|
+
rewards,
|
15
|
+
bias=None,
|
16
|
+
loss_fn=None,
|
17
|
+
num_generations=4,
|
18
|
+
beta=0.1,
|
19
|
+
compiled=True,
|
20
|
+
use_ref_model=False,
|
21
|
+
ref_input=None,
|
22
|
+
ref_weight=None,
|
23
|
+
ref_bias=None,
|
24
|
+
):
|
25
|
+
"""Chunked forward pass for RLHF loss computation."""
|
26
|
+
# Save for backward
|
27
|
+
ctx.beta = beta
|
28
|
+
ctx.rewards = rewards
|
29
|
+
|
30
|
+
# Initialize accumulators
|
31
|
+
loss_acc = torch.zeros((), device=_input.device)
|
32
|
+
grad_weight = torch.zeros_like(weight) # [V, H]
|
33
|
+
grad_inputs = []
|
34
|
+
grad_bias = torch.zeros_like(bias) if bias is not None else None # [V]
|
35
|
+
aggregated_metrics = []
|
36
|
+
|
37
|
+
# Create a partial function with fixed arguments
|
38
|
+
compute_loss = partial(
|
39
|
+
LigerFusedLinearRLHFBase._compute_chunk_loss,
|
40
|
+
beta=beta,
|
41
|
+
use_ref_model=use_ref_model,
|
42
|
+
ref_weight=ref_weight,
|
43
|
+
ref_bias=ref_bias,
|
44
|
+
rlhf_loss_fn=loss_fn,
|
45
|
+
)
|
46
|
+
|
47
|
+
def fused_fwd_bwd(input_chunk, attention_mask_chunk, rewards_chunk, ref_input_chunk):
|
48
|
+
"""Fused forward and backward for a chunk."""
|
49
|
+
if bias is not None:
|
50
|
+
return torch.func.grad_and_value(compute_loss, argnums=(0, 1, 5), has_aux=True)(
|
51
|
+
input_chunk, # arg 0
|
52
|
+
weight, # arg 1
|
53
|
+
attention_mask_chunk, # arg 2
|
54
|
+
rewards_chunk, # arg 3
|
55
|
+
ref_input_chunk, # arg 4
|
56
|
+
bias, # arg 5
|
57
|
+
)
|
58
|
+
else:
|
59
|
+
return torch.func.grad_and_value(compute_loss, argnums=(0, 1), has_aux=True)(
|
60
|
+
input_chunk, # arg 0
|
61
|
+
weight, # arg 1
|
62
|
+
attention_mask_chunk, # arg 2
|
63
|
+
rewards_chunk, # arg 3
|
64
|
+
ref_input_chunk, # arg 4
|
65
|
+
)
|
66
|
+
|
67
|
+
def accumulate_chunk(input_chunk, attention_mask_chunk, rewards_chunk, ref_input_chunk=None):
|
68
|
+
if bias is not None:
|
69
|
+
(chunk_grad_input, chunk_grad_weight, chunk_grad_bias), (chunk_loss, chunk_metrics) = fused_fwd_bwd(
|
70
|
+
input_chunk, attention_mask_chunk, rewards_chunk, ref_input_chunk
|
71
|
+
)
|
72
|
+
grad_bias.add_(chunk_grad_bias)
|
73
|
+
else:
|
74
|
+
(chunk_grad_input, chunk_grad_weight), (chunk_loss, chunk_metrics) = fused_fwd_bwd(
|
75
|
+
input_chunk, attention_mask_chunk, rewards_chunk, ref_input_chunk
|
76
|
+
)
|
77
|
+
|
78
|
+
# Accumulate gradients and loss
|
79
|
+
grad_weight.add_(chunk_grad_weight)
|
80
|
+
grad_inputs.append(chunk_grad_input)
|
81
|
+
loss_acc.add_(chunk_loss)
|
82
|
+
|
83
|
+
# Initialize storage for metrics on first chunk
|
84
|
+
if len(aggregated_metrics) == 0:
|
85
|
+
for metric in chunk_metrics:
|
86
|
+
if metric.ndim == 0:
|
87
|
+
aggregated_metrics.append(torch.zeros((), device=metric.device))
|
88
|
+
else:
|
89
|
+
aggregated_metrics.append([])
|
90
|
+
|
91
|
+
# Accumulate metrics
|
92
|
+
for i, metric in enumerate(chunk_metrics):
|
93
|
+
if metric.ndim == 0:
|
94
|
+
aggregated_metrics[i].add_(metric)
|
95
|
+
else:
|
96
|
+
aggregated_metrics[i].append(metric)
|
97
|
+
|
98
|
+
if compiled:
|
99
|
+
accumulate_chunk = torch.compile(accumulate_chunk)
|
100
|
+
|
101
|
+
# Process input in chunks
|
102
|
+
chunks = max(1, _input.shape[0] // num_generations)
|
103
|
+
_input_chunks = torch.chunk(_input, chunks=chunks, dim=0)
|
104
|
+
_attention_mask_chunks = torch.chunk(attention_mask, chunks=chunks, dim=0)
|
105
|
+
_rewards_chunks = torch.chunk(rewards, chunks=chunks, dim=0)
|
106
|
+
_ref_input_chunks = torch.chunk(ref_input, chunks=chunks, dim=0) if use_ref_model else [None] * chunks
|
107
|
+
|
108
|
+
for input_chunk, attention_mask_chunk, rewards_chunk, ref_input_chunk in zip(
|
109
|
+
_input_chunks, _attention_mask_chunks, _rewards_chunks, _ref_input_chunks
|
110
|
+
):
|
111
|
+
# Mark dynamic dimensions
|
112
|
+
torch._dynamo.mark_dynamic(input_chunk, 1)
|
113
|
+
torch._dynamo.mark_dynamic(attention_mask_chunk, 1)
|
114
|
+
if ref_input_chunk is not None:
|
115
|
+
torch._dynamo.mark_dynamic(ref_input_chunk, 1)
|
116
|
+
|
117
|
+
accumulate_chunk(input_chunk, attention_mask_chunk, rewards_chunk, ref_input_chunk)
|
118
|
+
|
119
|
+
# Scale accumulated loss by number of chunks since we're averaging
|
120
|
+
loss_acc = loss_acc / chunks
|
121
|
+
|
122
|
+
# Combine gradients
|
123
|
+
grad_input = torch.cat(grad_inputs, dim=0)
|
124
|
+
|
125
|
+
# Save for backward
|
126
|
+
ctx.save_for_backward(grad_input, grad_weight, grad_bias)
|
127
|
+
|
128
|
+
# Finalize metrics
|
129
|
+
final_metrics = []
|
130
|
+
for metric in aggregated_metrics:
|
131
|
+
if isinstance(metric, list):
|
132
|
+
final_metrics.append(torch.cat(metric, dim=0))
|
133
|
+
else:
|
134
|
+
final_metrics.append(metric / chunks)
|
135
|
+
|
136
|
+
return loss_acc, tuple(final_metrics)
|
137
|
+
|
138
|
+
@staticmethod
|
139
|
+
def _compute_chunk_loss(
|
140
|
+
input_chunk,
|
141
|
+
weight,
|
142
|
+
attention_mask_chunk,
|
143
|
+
rewards_chunk,
|
144
|
+
ref_input_chunk=None,
|
145
|
+
bias=None,
|
146
|
+
beta=0.1,
|
147
|
+
use_ref_model=False,
|
148
|
+
ref_weight=None,
|
149
|
+
ref_bias=None,
|
150
|
+
rlhf_loss_fn=None,
|
151
|
+
):
|
152
|
+
"""Compute loss for a single chunk."""
|
153
|
+
# Get policy log probabilities using chunk_forward
|
154
|
+
log_probs, _, logits_mean = LigerFusedLinearRLHFBase.chunk_forward(input_chunk, weight, bias=bias)
|
155
|
+
|
156
|
+
# Get reference log probabilities if needed
|
157
|
+
ref_log_probs = None
|
158
|
+
if use_ref_model and ref_input_chunk is not None:
|
159
|
+
with torch.no_grad():
|
160
|
+
ref_log_probs, _, _ = LigerFusedLinearRLHFBase.chunk_forward(ref_input_chunk, ref_weight, bias=ref_bias)
|
161
|
+
|
162
|
+
# Compute chunk loss and metrics using the provided loss function
|
163
|
+
chunk_loss, chunk_metrics = rlhf_loss_fn(
|
164
|
+
log_probs=log_probs,
|
165
|
+
attention_mask=attention_mask_chunk,
|
166
|
+
rewards=rewards_chunk,
|
167
|
+
ref_log_probs=ref_log_probs,
|
168
|
+
beta=beta,
|
169
|
+
)
|
170
|
+
|
171
|
+
return chunk_loss, (logits_mean, *chunk_metrics)
|
172
|
+
|
173
|
+
@staticmethod
|
174
|
+
def chunk_forward(input_chunk, weight, bias=None):
|
175
|
+
"""Forward pass computation for a single chunk without explicit reshaping."""
|
176
|
+
# Directly compute logits via batched matrix multiplication: [B, T, H] @ [H, V] -> [B, T, V]
|
177
|
+
logits = torch.matmul(input_chunk, weight.t())
|
178
|
+
if bias is not None:
|
179
|
+
logits = logits + bias # Broadcasts bias to [B, T, V]
|
180
|
+
|
181
|
+
# Compute log probabilities using softmax over the last dimension
|
182
|
+
log_probs = F.log_softmax(logits.float(), dim=-1)
|
183
|
+
|
184
|
+
# Monitoring: compute mean of logits
|
185
|
+
batch_size, seq_len, _ = input_chunk.shape
|
186
|
+
logits_mean = logits.sum() / (batch_size * seq_len * weight.shape[0])
|
187
|
+
return log_probs, logits, logits_mean
|
188
|
+
|
189
|
+
@staticmethod
|
190
|
+
def backward(ctx, grad_output, *grad_metrics):
|
191
|
+
"""Backward pass for RLHF loss."""
|
192
|
+
grad_input, grad_weight, grad_bias = ctx.saved_tensors
|
193
|
+
if grad_output != 1.0:
|
194
|
+
grad_input = grad_input * grad_output
|
195
|
+
grad_weight = grad_weight * grad_output
|
196
|
+
if grad_bias is not None:
|
197
|
+
grad_bias = grad_bias * grad_output
|
198
|
+
|
199
|
+
return (
|
200
|
+
grad_input,
|
201
|
+
grad_weight,
|
202
|
+
None, # grad_attention_mask
|
203
|
+
None, # grad_rewards
|
204
|
+
grad_bias,
|
205
|
+
None, # grad_loss_fn
|
206
|
+
None, # grad_chunk_size
|
207
|
+
None, # grad_beta
|
208
|
+
None, # grad_compiled
|
209
|
+
None, # grad_use_ref_model
|
210
|
+
None, # grad_ref_input
|
211
|
+
None, # grad_ref_weight
|
212
|
+
None, # grad_ref_bias
|
213
|
+
)
|
@@ -0,0 +1,160 @@
|
|
1
|
+
import torch
|
2
|
+
|
3
|
+
from liger_kernel.chunked_loss.fused_linear_rlhf import LigerFusedLinearRLHFBase
|
4
|
+
|
5
|
+
|
6
|
+
class LigerFusedLinearGRPOFunction(LigerFusedLinearRLHFBase):
|
7
|
+
@staticmethod
|
8
|
+
def rlhf_loss_fn(
|
9
|
+
log_probs,
|
10
|
+
attention_mask,
|
11
|
+
rewards,
|
12
|
+
ref_log_probs=None,
|
13
|
+
beta=0.1,
|
14
|
+
**kwargs,
|
15
|
+
):
|
16
|
+
"""GRPO Loss Function matching GRPOTrainer implementation."""
|
17
|
+
# Get chosen token probabilities
|
18
|
+
chosen_tokens = log_probs.argmax(dim=-1) # (batch_size, seq_len)
|
19
|
+
chosen_token_logprobs = log_probs.gather(dim=-1, index=chosen_tokens.unsqueeze(-1)).squeeze(
|
20
|
+
-1
|
21
|
+
) # (batch_size, seq_len)
|
22
|
+
|
23
|
+
# Get reference model probabilities
|
24
|
+
if ref_log_probs is not None:
|
25
|
+
with torch.no_grad():
|
26
|
+
ref_token_logprobs = ref_log_probs.gather(dim=-1, index=chosen_tokens.unsqueeze(-1)).squeeze(-1)
|
27
|
+
else:
|
28
|
+
ref_token_logprobs = chosen_token_logprobs.detach()
|
29
|
+
|
30
|
+
# Compute advantages per batch entry in a grouped fashion
|
31
|
+
mean_grouped_rewards = rewards.mean() # [batch_size,]
|
32
|
+
std_grouped_rewards = rewards.std() # [batch_size,]
|
33
|
+
|
34
|
+
# Calculate advantages using the same epsilon as in GRPOTrainer
|
35
|
+
eps = 1e-4
|
36
|
+
advantages = (rewards - mean_grouped_rewards) / (std_grouped_rewards + eps)
|
37
|
+
|
38
|
+
# Compute policy gradient loss with importance sampling ratio
|
39
|
+
ratio = torch.exp(chosen_token_logprobs - chosen_token_logprobs.detach())
|
40
|
+
policy_loss = -ratio * advantages.unsqueeze(1)
|
41
|
+
|
42
|
+
# Compute KL penalty
|
43
|
+
kl_div = (
|
44
|
+
torch.exp(ref_token_logprobs - chosen_token_logprobs) - (ref_token_logprobs - chosen_token_logprobs) - 1.0
|
45
|
+
)
|
46
|
+
|
47
|
+
# Combine losses
|
48
|
+
per_token_loss = policy_loss + beta * kl_div
|
49
|
+
|
50
|
+
# Apply masking and normalize
|
51
|
+
masked_loss = per_token_loss * attention_mask
|
52
|
+
seq_lengths = attention_mask.sum()
|
53
|
+
seq_lengths = torch.clamp(seq_lengths, min=1.0)
|
54
|
+
loss = masked_loss.sum() / seq_lengths
|
55
|
+
|
56
|
+
# Calculate metrics
|
57
|
+
metrics = (
|
58
|
+
chosen_token_logprobs.mean(), # mean log prob
|
59
|
+
chosen_token_logprobs.std(), # std log prob
|
60
|
+
log_probs.mean(), # mean all log probs
|
61
|
+
((kl_div * attention_mask).sum(dim=1) / attention_mask.sum(dim=1)).mean(), # mean KL div
|
62
|
+
)
|
63
|
+
|
64
|
+
return loss, metrics
|
65
|
+
|
66
|
+
@staticmethod
|
67
|
+
def forward(
|
68
|
+
ctx,
|
69
|
+
_input,
|
70
|
+
weight,
|
71
|
+
attention_mask,
|
72
|
+
rewards,
|
73
|
+
bias=None,
|
74
|
+
ref_input=None,
|
75
|
+
ref_weight=None,
|
76
|
+
ref_bias=None,
|
77
|
+
beta=0.1,
|
78
|
+
compiled=True,
|
79
|
+
use_ref_model=True,
|
80
|
+
num_generations=1,
|
81
|
+
):
|
82
|
+
return LigerFusedLinearRLHFBase.forward(
|
83
|
+
ctx=ctx,
|
84
|
+
_input=_input,
|
85
|
+
weight=weight,
|
86
|
+
attention_mask=attention_mask,
|
87
|
+
loss_fn=LigerFusedLinearGRPOFunction.rlhf_loss_fn,
|
88
|
+
rewards=rewards,
|
89
|
+
bias=bias,
|
90
|
+
ref_input=ref_input,
|
91
|
+
ref_weight=ref_weight,
|
92
|
+
ref_bias=ref_bias,
|
93
|
+
beta=beta,
|
94
|
+
compiled=compiled,
|
95
|
+
use_ref_model=use_ref_model,
|
96
|
+
num_generations=num_generations,
|
97
|
+
)
|
98
|
+
|
99
|
+
@staticmethod
|
100
|
+
def backward(ctx, grad_output, *grad_metrics):
|
101
|
+
"""Backward pass for GRPO loss.
|
102
|
+
|
103
|
+
Args:
|
104
|
+
grad_output: Gradient of the loss (scalar)
|
105
|
+
grad_metrics: Gradients of the metrics (not used in backward computation)
|
106
|
+
"""
|
107
|
+
grads = LigerFusedLinearRLHFBase.backward(ctx, grad_output)
|
108
|
+
return (
|
109
|
+
*grads[:5], # grad_input, grad_weight, grad_attention_mask, grad_rewards, grad_bias
|
110
|
+
None, # grad_ref_input
|
111
|
+
None, # grad_ref_weight
|
112
|
+
None, # grad_ref_bias
|
113
|
+
None, # grad_beta
|
114
|
+
None, # grad_compiled
|
115
|
+
None, # grad_use_ref_model
|
116
|
+
None, # grad_num_generations
|
117
|
+
)
|
118
|
+
|
119
|
+
|
120
|
+
class LigerFusedLinearGRPOLoss(torch.nn.Module):
|
121
|
+
"""Fused linear layer with GRPO loss."""
|
122
|
+
|
123
|
+
def __init__(
|
124
|
+
self,
|
125
|
+
beta: float = 0.1,
|
126
|
+
compiled: bool = True,
|
127
|
+
use_ref_model: bool = True,
|
128
|
+
num_generations: int = 1,
|
129
|
+
):
|
130
|
+
super().__init__()
|
131
|
+
self.beta = beta
|
132
|
+
self.compiled = compiled
|
133
|
+
self.use_ref_model = use_ref_model
|
134
|
+
self.num_generations = num_generations
|
135
|
+
|
136
|
+
def forward(
|
137
|
+
self,
|
138
|
+
_input,
|
139
|
+
lin_weight,
|
140
|
+
attention_mask,
|
141
|
+
rewards,
|
142
|
+
bias=None,
|
143
|
+
ref_input=None,
|
144
|
+
ref_weight=None,
|
145
|
+
ref_bias=None,
|
146
|
+
):
|
147
|
+
return LigerFusedLinearGRPOFunction.apply(
|
148
|
+
_input,
|
149
|
+
lin_weight,
|
150
|
+
attention_mask,
|
151
|
+
rewards,
|
152
|
+
bias,
|
153
|
+
ref_input,
|
154
|
+
ref_weight,
|
155
|
+
ref_bias,
|
156
|
+
self.beta,
|
157
|
+
self.compiled,
|
158
|
+
self.use_ref_model,
|
159
|
+
self.num_generations,
|
160
|
+
)
|
@@ -111,7 +111,9 @@ src/liger_kernel/chunked_loss/dpo_loss.py
|
|
111
111
|
src/liger_kernel/chunked_loss/functional.py
|
112
112
|
src/liger_kernel/chunked_loss/fused_linear_distillation.py
|
113
113
|
src/liger_kernel/chunked_loss/fused_linear_preference.py
|
114
|
+
src/liger_kernel/chunked_loss/fused_linear_rlhf.py
|
114
115
|
src/liger_kernel/chunked_loss/fused_linear_unpaired_preference.py
|
116
|
+
src/liger_kernel/chunked_loss/grpo_loss.py
|
115
117
|
src/liger_kernel/chunked_loss/jsd_loss.py
|
116
118
|
src/liger_kernel/chunked_loss/kto_loss.py
|
117
119
|
src/liger_kernel/chunked_loss/orpo_loss.py
|
@@ -175,6 +177,7 @@ test/utils.py
|
|
175
177
|
test/chunked_loss/__init__.py
|
176
178
|
test/chunked_loss/test_cpo_loss.py
|
177
179
|
test/chunked_loss/test_dpo_loss.py
|
180
|
+
test/chunked_loss/test_grpo_loss.py
|
178
181
|
test/chunked_loss/test_jsd_loss.py
|
179
182
|
test/chunked_loss/test_kto_loss.py
|
180
183
|
test/chunked_loss/test_orpo_loss.py
|