liger-kernel 0.5.1__tar.gz → 0.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- liger_kernel-0.5.3/.github/ISSUE_TEMPLATE/bug_report.yaml +48 -0
- liger_kernel-0.5.3/.github/ISSUE_TEMPLATE/feature_request.yaml +25 -0
- liger_kernel-0.5.3/.github/pull_request_template.md +22 -0
- liger_kernel-0.5.3/.github/workflows/amd-ci.yml +71 -0
- liger_kernel-0.5.3/.github/workflows/docs.yml +28 -0
- liger_kernel-0.5.3/.github/workflows/nvi-ci.yml +95 -0
- liger_kernel-0.5.3/.github/workflows/publish-nightly.yml +49 -0
- liger_kernel-0.5.3/.github/workflows/publish-release.yml +38 -0
- liger_kernel-0.5.3/.gitignore +22 -0
- liger_kernel-0.5.3/Makefile +54 -0
- {liger_kernel-0.5.1/src/liger_kernel.egg-info → liger_kernel-0.5.3}/PKG-INFO +38 -25
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/README.md +32 -13
- liger_kernel-0.5.3/benchmark/README.md +30 -0
- liger_kernel-0.5.3/benchmark/benchmarks_visualizer.py +164 -0
- liger_kernel-0.5.3/benchmark/data/all_benchmark_data.csv +771 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_cpo_loss.py +161 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_cross_entropy.py +123 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_distill_jsd_loss.py +261 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_dpo_loss.py +181 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_embedding.py +126 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_fused_linear_cross_entropy.py +170 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_fused_linear_jsd.py +260 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_geglu.py +179 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_group_norm.py +137 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_jsd.py +150 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_kl_div.py +117 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_kto_loss.py +314 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_layer_norm.py +125 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_orpo_loss.py +163 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_qwen2vl_mrope.py +227 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_rms_norm.py +162 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_rope.py +223 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_simpo_loss.py +161 -0
- liger_kernel-0.5.3/benchmark/scripts/benchmark_swiglu.py +175 -0
- liger_kernel-0.5.3/benchmark/scripts/utils.py +347 -0
- liger_kernel-0.5.3/dev/fmt-requirements.txt +1 -0
- liger_kernel-0.5.3/dev/modal/tests.py +28 -0
- liger_kernel-0.5.3/dev/modal/tests_bwd.py +35 -0
- liger_kernel-0.5.3/docs/Examples.md +268 -0
- liger_kernel-0.5.3/docs/Getting-Started.md +64 -0
- liger_kernel-0.5.3/docs/High-Level-APIs.md +30 -0
- liger_kernel-0.5.3/docs/Low-Level-APIs.md +74 -0
- liger_kernel-0.5.3/docs/acknowledgement.md +24 -0
- liger_kernel-0.5.3/docs/contributing.md +117 -0
- liger_kernel-0.5.3/docs/images/banner.GIF +0 -0
- liger_kernel-0.5.3/docs/images/compose.gif +0 -0
- liger_kernel-0.5.3/docs/images/e2e-memory.png +0 -0
- liger_kernel-0.5.3/docs/images/e2e-tps.png +0 -0
- liger_kernel-0.5.3/docs/images/logo-banner.png +0 -0
- liger_kernel-0.5.3/docs/images/patch.gif +0 -0
- liger_kernel-0.5.3/docs/images/post-training.png +0 -0
- liger_kernel-0.5.3/docs/index.md +188 -0
- liger_kernel-0.5.3/docs/license.md +8 -0
- liger_kernel-0.5.3/examples/alignment/accelerate_config.yaml +26 -0
- liger_kernel-0.5.3/examples/alignment/run_orpo.py +35 -0
- liger_kernel-0.5.3/examples/huggingface/README.md +55 -0
- liger_kernel-0.5.3/examples/huggingface/callback.py +257 -0
- liger_kernel-0.5.3/examples/huggingface/config/fsdp_config.json +5 -0
- liger_kernel-0.5.3/examples/huggingface/img/gemma_7b_mem.png +0 -0
- liger_kernel-0.5.3/examples/huggingface/img/gemma_7b_tp.png +0 -0
- liger_kernel-0.5.3/examples/huggingface/img/llama_mem_alloc.png +0 -0
- liger_kernel-0.5.3/examples/huggingface/img/llama_tps.png +0 -0
- liger_kernel-0.5.3/examples/huggingface/img/qwen_mem_alloc.png +0 -0
- liger_kernel-0.5.3/examples/huggingface/img/qwen_tps.png +0 -0
- liger_kernel-0.5.3/examples/huggingface/launch_on_modal.py +69 -0
- liger_kernel-0.5.3/examples/huggingface/requirements.txt +6 -0
- liger_kernel-0.5.3/examples/huggingface/run_benchmarks.sh +52 -0
- liger_kernel-0.5.3/examples/huggingface/run_gemma.sh +22 -0
- liger_kernel-0.5.3/examples/huggingface/run_llama.sh +21 -0
- liger_kernel-0.5.3/examples/huggingface/run_qwen.sh +22 -0
- liger_kernel-0.5.3/examples/huggingface/run_qwen2_vl.sh +22 -0
- liger_kernel-0.5.3/examples/huggingface/training.py +79 -0
- liger_kernel-0.5.3/examples/huggingface/training_multimodal.py +169 -0
- liger_kernel-0.5.3/examples/lightning/README.md +21 -0
- liger_kernel-0.5.3/examples/lightning/requirements.txt +8 -0
- liger_kernel-0.5.3/examples/lightning/training.py +281 -0
- liger_kernel-0.5.3/examples/medusa/README.md +72 -0
- liger_kernel-0.5.3/examples/medusa/callback.py +386 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Memory_Stage1_num_head_3.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Memory_Stage1_num_head_5.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Memory_Stage2_num_head_3.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Memory_Stage2_num_head_5.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Throughput_Stage1_num_head_3.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Throughput_Stage1_num_head_5.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Throughput_Stage2_num_head_3.png +0 -0
- liger_kernel-0.5.3/examples/medusa/docs/images/Throughput_Stage2_num_head_5.png +0 -0
- liger_kernel-0.5.3/examples/medusa/fsdp/acc-fsdp.conf +24 -0
- liger_kernel-0.5.3/examples/medusa/medusa_util.py +267 -0
- liger_kernel-0.5.3/examples/medusa/requirements.txt +3 -0
- liger_kernel-0.5.3/examples/medusa/scripts/llama3_8b_medusa.sh +56 -0
- liger_kernel-0.5.3/examples/medusa/train.py +383 -0
- liger_kernel-0.5.3/licenses/LICENSE-Apache-2.0 +201 -0
- liger_kernel-0.5.3/licenses/LICENSE-MIT-AutoAWQ +21 -0
- liger_kernel-0.5.3/licenses/LICENSE-MIT-Efficient-Cross-Entropy +21 -0
- liger_kernel-0.5.3/licenses/LICENSE-MIT-llmc +21 -0
- liger_kernel-0.5.3/licenses/LICENSE-MIT-triton +23 -0
- liger_kernel-0.5.3/mkdocs.yml +69 -0
- liger_kernel-0.5.3/pyproject.toml +58 -0
- liger_kernel-0.5.3/setup.py +73 -0
- liger_kernel-0.5.3/src/liger_kernel/chunked_loss/README.md +25 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/__init__.py +2 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/cpo_loss.py +18 -8
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/dpo_loss.py +20 -10
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/functional.py +4 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/fused_linear_distillation.py +58 -44
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/fused_linear_preference.py +108 -60
- liger_kernel-0.5.3/src/liger_kernel/chunked_loss/fused_linear_unpaired_preference.py +246 -0
- liger_kernel-0.5.3/src/liger_kernel/chunked_loss/jsd_loss.py +154 -0
- liger_kernel-0.5.3/src/liger_kernel/chunked_loss/kto_loss.py +172 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/orpo_loss.py +8 -9
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/chunked_loss/simpo_loss.py +22 -8
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/env_report.py +5 -12
- liger_kernel-0.5.3/src/liger_kernel/ops/__init__.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/cross_entropy.py +102 -51
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/experimental/embedding.py +1 -3
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/experimental/mm_int8int2.py +3 -9
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/fused_linear_cross_entropy.py +89 -55
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/fused_linear_jsd.py +11 -29
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/geglu.py +6 -17
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/group_norm.py +11 -28
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/jsd.py +2 -6
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/kl_div.py +8 -11
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/layer_norm.py +3 -5
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/qwen2vl_mrope.py +21 -37
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/rms_norm.py +14 -32
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/rope.py +31 -33
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/swiglu.py +4 -8
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/ops/utils.py +2 -0
- liger_kernel-0.5.3/src/liger_kernel/transformers/__init__.py +23 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/auto_model.py +6 -13
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/cross_entropy.py +4 -6
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/experimental/embedding.py +1 -3
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/functional.py +11 -7
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/fused_linear_cross_entropy.py +12 -7
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/geglu.py +1 -4
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/group_norm.py +3 -9
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/jsd.py +1 -3
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/kl_div.py +1 -3
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/layer_norm.py +3 -9
- liger_kernel-0.5.3/src/liger_kernel/transformers/model/__init__.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/gemma.py +18 -40
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/gemma2.py +19 -41
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/llama.py +22 -48
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/mistral.py +14 -26
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/mixtral.py +24 -54
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/mllama.py +16 -36
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/phi3.py +18 -40
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/qwen2.py +18 -40
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/model/qwen2_vl.py +36 -32
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/monkey_patch.py +43 -117
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/qwen2vl_mrope.py +2 -2
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/rms_norm.py +4 -4
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/rope.py +2 -2
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/swiglu.py +2 -8
- liger_kernel-0.5.3/src/liger_kernel/transformers/trainer/__init__.py +4 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/trainer/orpo_trainer.py +31 -18
- liger_kernel-0.5.3/src/liger_kernel/triton/__init__.py +1 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/triton/monkey_patch.py +1 -3
- {liger_kernel-0.5.1 → liger_kernel-0.5.3/src/liger_kernel.egg-info}/PKG-INFO +38 -25
- liger_kernel-0.5.3/src/liger_kernel.egg-info/SOURCES.txt +210 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel.egg-info/requires.txt +2 -13
- liger_kernel-0.5.3/test/__init__.py +0 -0
- liger_kernel-0.5.3/test/chunked_loss/__init__.py +0 -0
- liger_kernel-0.5.3/test/chunked_loss/test_cpo_loss.py +302 -0
- liger_kernel-0.5.3/test/chunked_loss/test_dpo_loss.py +356 -0
- liger_kernel-0.5.3/test/chunked_loss/test_jsd_loss.py +318 -0
- liger_kernel-0.5.3/test/chunked_loss/test_kto_loss.py +353 -0
- liger_kernel-0.5.3/test/chunked_loss/test_orpo_loss.py +260 -0
- liger_kernel-0.5.3/test/chunked_loss/test_simpo_loss.py +215 -0
- liger_kernel-0.5.3/test/conftest.py +8 -0
- liger_kernel-0.5.3/test/convergence/__init__.py +0 -0
- liger_kernel-0.5.3/test/convergence/test_mini_models.py +694 -0
- liger_kernel-0.5.3/test/convergence/test_mini_models_multimodal.py +456 -0
- liger_kernel-0.5.3/test/convergence/test_mini_models_with_logits.py +693 -0
- liger_kernel-0.5.3/test/resources/fake_configs/Qwen/Qwen2-VL-7B-Instruct/tokenizer_config.json +63 -0
- liger_kernel-0.5.3/test/resources/fake_configs/meta-llama/Llama-3.2-11B-Vision-Instruct/tokenizer_config.json +31 -0
- liger_kernel-0.5.3/test/resources/scripts/generate_tokenized_dataset.py +71 -0
- liger_kernel-0.5.3/test/resources/tiny_shakespeare.txt +40000 -0
- liger_kernel-0.5.3/test/resources/tiny_shakespeare_tokenized/data-00000-of-00001.arrow +0 -0
- liger_kernel-0.5.3/test/resources/tiny_shakespeare_tokenized/dataset_info.json +48 -0
- liger_kernel-0.5.3/test/resources/tiny_shakespeare_tokenized/state.json +13 -0
- liger_kernel-0.5.3/test/transformers/test_auto_model.py +54 -0
- liger_kernel-0.5.3/test/transformers/test_cross_entropy.py +918 -0
- liger_kernel-0.5.3/test/transformers/test_embedding.py +61 -0
- liger_kernel-0.5.3/test/transformers/test_fused_linear_cross_entropy.py +348 -0
- liger_kernel-0.5.3/test/transformers/test_fused_linear_jsd.py +450 -0
- liger_kernel-0.5.3/test/transformers/test_geglu.py +145 -0
- liger_kernel-0.5.3/test/transformers/test_group_norm.py +58 -0
- liger_kernel-0.5.3/test/transformers/test_jsd.py +324 -0
- liger_kernel-0.5.3/test/transformers/test_kl_div.py +104 -0
- liger_kernel-0.5.3/test/transformers/test_layer_norm.py +97 -0
- liger_kernel-0.5.3/test/transformers/test_mm_int8int2.py +97 -0
- liger_kernel-0.5.3/test/transformers/test_monkey_patch.py +697 -0
- liger_kernel-0.5.3/test/transformers/test_qwen2vl_mrope.py +138 -0
- liger_kernel-0.5.3/test/transformers/test_rms_norm.py +185 -0
- liger_kernel-0.5.3/test/transformers/test_rope.py +183 -0
- liger_kernel-0.5.3/test/transformers/test_swiglu.py +214 -0
- liger_kernel-0.5.3/test/transformers/test_trainer_integration.py +8 -0
- liger_kernel-0.5.3/test/transformers/test_transformers.py +16 -0
- liger_kernel-0.5.3/test/triton/test_triton_monkey_patch.py +29 -0
- liger_kernel-0.5.3/test/utils.py +698 -0
- liger_kernel-0.5.1/pyproject.toml +0 -61
- liger_kernel-0.5.1/src/liger_kernel/transformers/__init__.py +0 -31
- liger_kernel-0.5.1/src/liger_kernel/transformers/trainer/__init__.py +0 -6
- liger_kernel-0.5.1/src/liger_kernel/triton/__init__.py +0 -3
- liger_kernel-0.5.1/src/liger_kernel.egg-info/SOURCES.txt +0 -68
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/LICENSE +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/NOTICE +0 -0
- {liger_kernel-0.5.1/src/liger_kernel → liger_kernel-0.5.3/benchmark}/__init__.py +0 -0
- {liger_kernel-0.5.1/src/liger_kernel/ops → liger_kernel-0.5.3/benchmark/scripts}/__init__.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/setup.cfg +0 -0
- {liger_kernel-0.5.1/src/liger_kernel/transformers/model → liger_kernel-0.5.3/src/liger_kernel}/__init__.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/fused_linear_jsd.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/transformers/trainer_integration.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel/utils.py +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel.egg-info/dependency_links.txt +0 -0
- {liger_kernel-0.5.1 → liger_kernel-0.5.3}/src/liger_kernel.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: 🐛 Bug Report
|
|
2
|
+
description: Create a report to help us reproduce and fix the bug
|
|
3
|
+
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: >
|
|
8
|
+
#### Before submitting a bug, please make sure the issue hasn't been already addressed by searching through [the existing and past issues](https://github.com/linkedin/Liger-Kernel/issues).
|
|
9
|
+
- type: textarea
|
|
10
|
+
attributes:
|
|
11
|
+
label: 🐛 Describe the bug
|
|
12
|
+
description: |
|
|
13
|
+
Please provide a clear and concise description of what the bug is.
|
|
14
|
+
placeholder: |
|
|
15
|
+
A clear and concise description of what the bug is.
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- type: textarea
|
|
20
|
+
attributes:
|
|
21
|
+
label: Reproduce
|
|
22
|
+
description: |
|
|
23
|
+
If applicable, add a minimal example so that we can reproduce the error by running the code.
|
|
24
|
+
The snippet needs to be as succinct (minimal) as possible, so please take time to trim down any irrelevant code to help us debug efficiently.
|
|
25
|
+
We are going to copy-paste your code and we expect to get the same result as you did: avoid any external data, and include the relevant imports, etc.
|
|
26
|
+
If the code is too long (hopefully, it isn't), feel free to put it in a public gist and link it in the issue: https://gist.github.com.
|
|
27
|
+
Please also paste or describe the results you observe instead of the expected results.
|
|
28
|
+
If you observe an error, please paste the error message including the **full** traceback of the exception.
|
|
29
|
+
validations:
|
|
30
|
+
required: false
|
|
31
|
+
|
|
32
|
+
- type: textarea
|
|
33
|
+
attributes:
|
|
34
|
+
label: Versions
|
|
35
|
+
description: |
|
|
36
|
+
Please provide triton, torch, hardware, and other necessary versions to reproduce the bug.
|
|
37
|
+
|
|
38
|
+
For convenience, you can run the following command to get the versions of important software dependencies:
|
|
39
|
+
```bash
|
|
40
|
+
python -m liger_kernel.env_report
|
|
41
|
+
```
|
|
42
|
+
validations:
|
|
43
|
+
required: true
|
|
44
|
+
|
|
45
|
+
- type: markdown
|
|
46
|
+
attributes:
|
|
47
|
+
value: >
|
|
48
|
+
Thanks for contributing 🎉!
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: 🚀 Feature request
|
|
2
|
+
description: Submit a proposal/request for a new Liger feature
|
|
3
|
+
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
attributes:
|
|
7
|
+
label: 🚀 The feature, motivation and pitch
|
|
8
|
+
description: >
|
|
9
|
+
A clear and concise description of the feature proposal. Please outline the motivation for the proposal. Is your feature request related to a specific problem? e.g., *"I'm working on X and would like Y to be possible"*. If this is related to another GitHub issue, please link here too.
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
attributes:
|
|
14
|
+
label: Alternatives
|
|
15
|
+
description: >
|
|
16
|
+
A description of any alternative solutions or features you've considered, if any.
|
|
17
|
+
- type: textarea
|
|
18
|
+
attributes:
|
|
19
|
+
label: Additional context
|
|
20
|
+
description: >
|
|
21
|
+
Add any other context or screenshots about the feature request.
|
|
22
|
+
- type: markdown
|
|
23
|
+
attributes:
|
|
24
|
+
value: >
|
|
25
|
+
Thanks for contributing 🎉!
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
<!--- This is a required section; please describe the main purpose of this proposed code change. --->
|
|
3
|
+
|
|
4
|
+
<!---
|
|
5
|
+
## Details
|
|
6
|
+
This is an optional section; is there anything specific that reviewers should be aware of?
|
|
7
|
+
--->
|
|
8
|
+
|
|
9
|
+
## Testing Done
|
|
10
|
+
<!--- This is a required section; please describe how this change was tested. --->
|
|
11
|
+
|
|
12
|
+
<!--
|
|
13
|
+
Replace BLANK with your device type. For example, A100-80G-PCIe
|
|
14
|
+
|
|
15
|
+
Complete the following tasks before sending your PR, and replace `[ ]` with
|
|
16
|
+
`[x]` to indicate you have done them.
|
|
17
|
+
-->
|
|
18
|
+
|
|
19
|
+
- Hardware Type: <BLANK>
|
|
20
|
+
- [ ] run `make test` to ensure correctness
|
|
21
|
+
- [ ] run `make checkstyle` to ensure code style
|
|
22
|
+
- [ ] run `make test-convergence` to ensure convergence
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: AMD GPU
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- "src/**"
|
|
9
|
+
- "test/**"
|
|
10
|
+
pull_request:
|
|
11
|
+
branches:
|
|
12
|
+
- main
|
|
13
|
+
paths:
|
|
14
|
+
- "src/**"
|
|
15
|
+
- "test/**"
|
|
16
|
+
schedule:
|
|
17
|
+
# Runs at 00:00 UTC daily
|
|
18
|
+
- cron: '0 0 * * *'
|
|
19
|
+
workflow_dispatch: # Enables manual trigger
|
|
20
|
+
|
|
21
|
+
concurrency:
|
|
22
|
+
# This causes it to cancel previous in-progress actions on the same PR / branch,
|
|
23
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
24
|
+
cancel-in-progress: true
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
checkstyle:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
|
|
30
|
+
steps:
|
|
31
|
+
- name: Checkout code
|
|
32
|
+
uses: actions/checkout@v3
|
|
33
|
+
|
|
34
|
+
- name: Set up Python
|
|
35
|
+
uses: actions/setup-python@v3
|
|
36
|
+
with:
|
|
37
|
+
python-version: '3.10'
|
|
38
|
+
|
|
39
|
+
- name: Install dependencies
|
|
40
|
+
run: |
|
|
41
|
+
python -m pip install --upgrade pip
|
|
42
|
+
pip install -r dev/fmt-requirements.txt
|
|
43
|
+
|
|
44
|
+
- name: Run checkstyle
|
|
45
|
+
run: make checkstyle
|
|
46
|
+
|
|
47
|
+
tests:
|
|
48
|
+
runs-on: linux-mi300-gpu-1
|
|
49
|
+
needs: [checkstyle]
|
|
50
|
+
|
|
51
|
+
steps:
|
|
52
|
+
- name: Checkout code
|
|
53
|
+
uses: actions/checkout@v3
|
|
54
|
+
|
|
55
|
+
- name: Set up Python
|
|
56
|
+
uses: actions/setup-python@v3
|
|
57
|
+
with:
|
|
58
|
+
python-version: '3.10'
|
|
59
|
+
|
|
60
|
+
- name: Setup Dependencies
|
|
61
|
+
run: |
|
|
62
|
+
python -m pip install --upgrade pip
|
|
63
|
+
pip install -e .[dev] --extra-index-url https://download.pytorch.org/whl/nightly/rocm6.2
|
|
64
|
+
|
|
65
|
+
- name: List Python Environments
|
|
66
|
+
run: python -m pip list
|
|
67
|
+
|
|
68
|
+
- name: Run Unit Tests
|
|
69
|
+
run: |
|
|
70
|
+
make test
|
|
71
|
+
make test-convergence
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Publish documentation
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- gh-pages
|
|
6
|
+
permissions:
|
|
7
|
+
contents: write
|
|
8
|
+
jobs:
|
|
9
|
+
deploy:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- name: Configure Git Credentials
|
|
14
|
+
run: |
|
|
15
|
+
git config user.name github-actions[bot]
|
|
16
|
+
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: 3.x
|
|
20
|
+
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
|
21
|
+
- uses: actions/cache@v4
|
|
22
|
+
with:
|
|
23
|
+
key: mkdocs-material-${{ env.cache_id }}
|
|
24
|
+
path: .cache
|
|
25
|
+
restore-keys: |
|
|
26
|
+
mkdocs-material-
|
|
27
|
+
- run: pip install mkdocs-material
|
|
28
|
+
- run: mkdocs gh-deploy --force
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: NVIDIA GPU
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- "src/**"
|
|
9
|
+
- "test/**"
|
|
10
|
+
pull_request:
|
|
11
|
+
branches:
|
|
12
|
+
- main
|
|
13
|
+
paths:
|
|
14
|
+
- "src/**"
|
|
15
|
+
- "test/**"
|
|
16
|
+
schedule:
|
|
17
|
+
# Runs at 00:00 UTC daily
|
|
18
|
+
- cron: '0 0 * * *'
|
|
19
|
+
workflow_dispatch: # Enables manual trigger
|
|
20
|
+
|
|
21
|
+
concurrency:
|
|
22
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
23
|
+
cancel-in-progress: true
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
checkstyle:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout code
|
|
31
|
+
uses: actions/checkout@v3
|
|
32
|
+
|
|
33
|
+
- name: Set up Python
|
|
34
|
+
uses: actions/setup-python@v3
|
|
35
|
+
with:
|
|
36
|
+
python-version: '3.10'
|
|
37
|
+
|
|
38
|
+
- name: Install dependencies
|
|
39
|
+
run: |
|
|
40
|
+
python -m pip install --upgrade pip
|
|
41
|
+
pip install -r dev/fmt-requirements.txt
|
|
42
|
+
|
|
43
|
+
- name: Run checkstyle
|
|
44
|
+
run: make checkstyle
|
|
45
|
+
|
|
46
|
+
tests:
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
needs: [checkstyle]
|
|
49
|
+
env:
|
|
50
|
+
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
|
|
51
|
+
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- name: Checkout code
|
|
55
|
+
uses: actions/checkout@v3
|
|
56
|
+
|
|
57
|
+
- name: Set up Python
|
|
58
|
+
uses: actions/setup-python@v3
|
|
59
|
+
with:
|
|
60
|
+
python-version: '3.10'
|
|
61
|
+
|
|
62
|
+
- name: Install dependencies
|
|
63
|
+
run: |
|
|
64
|
+
python -m pip install --upgrade pip
|
|
65
|
+
pip install modal
|
|
66
|
+
|
|
67
|
+
- name: Run tests
|
|
68
|
+
run: |
|
|
69
|
+
modal run dev.modal.tests
|
|
70
|
+
|
|
71
|
+
tests-bwd:
|
|
72
|
+
runs-on: ubuntu-latest
|
|
73
|
+
needs: [checkstyle]
|
|
74
|
+
env:
|
|
75
|
+
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
|
|
76
|
+
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
|
|
77
|
+
REBUILD_IMAGE: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
|
|
78
|
+
|
|
79
|
+
steps:
|
|
80
|
+
- name: Checkout code
|
|
81
|
+
uses: actions/checkout@v3
|
|
82
|
+
|
|
83
|
+
- name: Set up Python
|
|
84
|
+
uses: actions/setup-python@v3
|
|
85
|
+
with:
|
|
86
|
+
python-version: '3.10'
|
|
87
|
+
|
|
88
|
+
- name: Install dependencies
|
|
89
|
+
run: |
|
|
90
|
+
python -m pip install --upgrade pip
|
|
91
|
+
pip install modal
|
|
92
|
+
|
|
93
|
+
- name: Run tests
|
|
94
|
+
run: |
|
|
95
|
+
modal run dev.modal.tests_bwd
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Publish Liger Kernel Nightly
|
|
2
|
+
|
|
3
|
+
# Though it is name "nightly", we will trigger this workflow on push to the main branch for convenience.
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches:
|
|
8
|
+
- main # Trigger on push to the main branch
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout repository
|
|
16
|
+
uses: actions/checkout@v3
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v3
|
|
20
|
+
with:
|
|
21
|
+
python-version: '3.8'
|
|
22
|
+
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
pip install build twine wheel toml
|
|
27
|
+
|
|
28
|
+
- name: Update package name and version
|
|
29
|
+
run: |
|
|
30
|
+
VERSION=$(python -c "import toml; print(toml.load('pyproject.toml')['project']['version'])")
|
|
31
|
+
DATE=$(date +%Y%m%d%H%M%S)
|
|
32
|
+
NEW_VERSION="$VERSION.dev$DATE"
|
|
33
|
+
sed -i "s/name = \"liger_kernel\"/name = \"liger_kernel_nightly\"/" pyproject.toml
|
|
34
|
+
sed -i "s/version = \"$VERSION\"/version = \"$NEW_VERSION\"/" pyproject.toml
|
|
35
|
+
|
|
36
|
+
- name: Build package
|
|
37
|
+
run: |
|
|
38
|
+
python -m build
|
|
39
|
+
|
|
40
|
+
- name: Publish package to PyPI
|
|
41
|
+
env:
|
|
42
|
+
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
|
43
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_NIGHTLY_PASSWORD }}
|
|
44
|
+
run: |
|
|
45
|
+
twine upload dist/*
|
|
46
|
+
|
|
47
|
+
- name: Create release notes
|
|
48
|
+
run: |
|
|
49
|
+
echo "Nightly build published to PyPI with the name 'liger-kernel-nightly'."
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Publish Liger Kernel on Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- name: Checkout repository
|
|
13
|
+
uses: actions/checkout@v3
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v3
|
|
17
|
+
with:
|
|
18
|
+
python-version: '3.10'
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
pip install build twine wheel toml
|
|
24
|
+
|
|
25
|
+
- name: Build package
|
|
26
|
+
run: |
|
|
27
|
+
python -m build
|
|
28
|
+
|
|
29
|
+
- name: Publish package to PyPI
|
|
30
|
+
env:
|
|
31
|
+
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
|
32
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
|
33
|
+
run: |
|
|
34
|
+
twine upload dist/*
|
|
35
|
+
|
|
36
|
+
- name: Create release notes
|
|
37
|
+
run: |
|
|
38
|
+
echo "Release published to PyPI with the name 'liger-kernel'."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.egg-info/
|
|
3
|
+
site/
|
|
4
|
+
.cache/
|
|
5
|
+
.venv/
|
|
6
|
+
venv/
|
|
7
|
+
.ipynb_checkpoints/
|
|
8
|
+
.vscode/
|
|
9
|
+
|
|
10
|
+
# Misc
|
|
11
|
+
.DS_Store
|
|
12
|
+
|
|
13
|
+
# Build
|
|
14
|
+
build/
|
|
15
|
+
dist/
|
|
16
|
+
|
|
17
|
+
# Lockfiles
|
|
18
|
+
uv.lock
|
|
19
|
+
|
|
20
|
+
# Benchmark images
|
|
21
|
+
benchmark/visualizations
|
|
22
|
+
.vscode/
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
.PHONY: test checkstyle test-convergence all serve build clean
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
all: checkstyle test test-convergence
|
|
5
|
+
|
|
6
|
+
# Command to run pytest for correctness tests
|
|
7
|
+
test:
|
|
8
|
+
python -m pytest --disable-warnings test/ --ignore=test/convergence
|
|
9
|
+
|
|
10
|
+
# Command to run ruff for linting and formatting code
|
|
11
|
+
checkstyle:
|
|
12
|
+
ruff check . --fix; ruff_check_status=$$?; \
|
|
13
|
+
ruff format .; ruff_format_status=$$?; \
|
|
14
|
+
if [ $$ruff_check_status -ne 0 ] || [ $$ruff_format_status -ne 0 ]; then \
|
|
15
|
+
exit 1; \
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
# Command to run pytest for convergence tests
|
|
19
|
+
# We have to explicitly set HF_DATASETS_OFFLINE=1, or dataset will silently try to send metrics and timeout (80s) https://github.com/huggingface/datasets/blob/37a603679f451826cfafd8aae00738b01dcb9d58/src/datasets/load.py#L286
|
|
20
|
+
test-convergence:
|
|
21
|
+
HF_DATASETS_OFFLINE=1 python -m pytest --disable-warnings test/convergence/test_mini_models.py
|
|
22
|
+
HF_DATASETS_OFFLINE=1 python -m pytest --disable-warnings test/convergence/test_mini_models_multimodal.py
|
|
23
|
+
HF_DATASETS_OFFLINE=1 python -m pytest --disable-warnings test/convergence/test_mini_models_with_logits.py
|
|
24
|
+
|
|
25
|
+
# Command to run all benchmark scripts and update benchmarking data file
|
|
26
|
+
# By default this doesn't overwrite existing data for the same benchmark experiment
|
|
27
|
+
# run with `make run-benchmarks OVERWRITE=1` to overwrite existing benchmark data
|
|
28
|
+
BENCHMARK_DIR = benchmark/scripts
|
|
29
|
+
BENCHMARK_SCRIPTS = $(wildcard $(BENCHMARK_DIR)/benchmark_*.py)
|
|
30
|
+
OVERWRITE ?= 0
|
|
31
|
+
|
|
32
|
+
run-benchmarks:
|
|
33
|
+
@for script in $(BENCHMARK_SCRIPTS); do \
|
|
34
|
+
echo "Running benchmark: $$script"; \
|
|
35
|
+
if [ $(OVERWRITE) -eq 1 ]; then \
|
|
36
|
+
python $$script --overwrite; \
|
|
37
|
+
else \
|
|
38
|
+
python $$script; \
|
|
39
|
+
fi; \
|
|
40
|
+
done
|
|
41
|
+
|
|
42
|
+
# MkDocs Configuration
|
|
43
|
+
MKDOCS = mkdocs
|
|
44
|
+
CONFIG_FILE = mkdocs.yml
|
|
45
|
+
|
|
46
|
+
# MkDocs targets
|
|
47
|
+
serve:
|
|
48
|
+
$(MKDOCS) serve -f $(CONFIG_FILE)
|
|
49
|
+
|
|
50
|
+
build:
|
|
51
|
+
$(MKDOCS) build -f $(CONFIG_FILE)
|
|
52
|
+
|
|
53
|
+
clean:
|
|
54
|
+
rm -rf site/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: liger_kernel
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: Efficient Triton kernels for LLM Training
|
|
5
5
|
License: BSD 2-CLAUSE LICENSE
|
|
6
6
|
Copyright 2024 LinkedIn Corporation
|
|
@@ -32,10 +32,6 @@ License-File: LICENSE
|
|
|
32
32
|
License-File: NOTICE
|
|
33
33
|
Requires-Dist: torch>=2.1.2
|
|
34
34
|
Requires-Dist: triton>=2.3.1
|
|
35
|
-
Provides-Extra: transformers
|
|
36
|
-
Requires-Dist: transformers~=4.0; extra == "transformers"
|
|
37
|
-
Provides-Extra: trl
|
|
38
|
-
Requires-Dist: trl>=0.11.0; extra == "trl"
|
|
39
35
|
Provides-Extra: dev
|
|
40
36
|
Requires-Dist: transformers>=4.44.2; extra == "dev"
|
|
41
37
|
Requires-Dist: matplotlib>=3.7.2; extra == "dev"
|
|
@@ -46,13 +42,11 @@ Requires-Dist: pytest>=7.1.2; extra == "dev"
|
|
|
46
42
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
47
43
|
Requires-Dist: pytest-rerunfailures; extra == "dev"
|
|
48
44
|
Requires-Dist: datasets>=2.19.2; extra == "dev"
|
|
49
|
-
Requires-Dist: torchvision>=0.16.2; extra == "dev"
|
|
50
45
|
Requires-Dist: seaborn; extra == "dev"
|
|
51
|
-
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
Requires-Dist: triton>=3.0.0; extra == "amd"
|
|
46
|
+
Requires-Dist: mkdocs; extra == "dev"
|
|
47
|
+
Requires-Dist: mkdocs-material; extra == "dev"
|
|
48
|
+
Dynamic: provides-extra
|
|
49
|
+
Dynamic: requires-dist
|
|
56
50
|
|
|
57
51
|
<a name="readme-top"></a>
|
|
58
52
|
|
|
@@ -116,7 +110,8 @@ Requires-Dist: triton>=3.0.0; extra == "amd"
|
|
|
116
110
|
<details>
|
|
117
111
|
<summary>Latest News 🔥</summary>
|
|
118
112
|
|
|
119
|
-
- [2024/12/
|
|
113
|
+
- [2024/12/11] We release [v0.5.0](https://github.com/linkedin/Liger-Kernel/releases/tag/v0.5.0): 80% more memory efficient post training losses (DPO, ORPO, CPO, etc)!
|
|
114
|
+
- [2024/12/5] We release LinkedIn Engineering Blog - [Liger-Kernel: Empowering an open source ecosystem of Triton Kernels for Efficient LLM Training](https://www.linkedin.com/blog/engineering/open-source/liger-kernel-open-source-ecosystem-for-efficient-llm-training)
|
|
120
115
|
- [2024/11/6] We release [v0.4.0](https://github.com/linkedin/Liger-Kernel/releases/tag/v0.4.0): Full AMD support, Tech Report, Modal CI, Llama-3.2-Vision!
|
|
121
116
|
- [2024/10/21] We have released the tech report of Liger Kernel on Arxiv: https://arxiv.org/pdf/2410.10989
|
|
122
117
|
- [2024/9/6] We release v0.2.1 ([X post](https://x.com/liger_kernel/status/1832168197002510649)). 2500+ Stars, 10+ New Contributors, 50+ PRs, 50k Downloads in two weeks!
|
|
@@ -128,7 +123,7 @@ Requires-Dist: triton>=3.0.0; extra == "amd"
|
|
|
128
123
|
|
|
129
124
|
**Liger Kernel** is a collection of Triton kernels designed specifically for LLM training. It can effectively increase multi-GPU **training throughput by 20%** and reduces **memory usage by 60%**. We have implemented **Hugging Face Compatible** `RMSNorm`, `RoPE`, `SwiGLU`, `CrossEntropy`, `FusedLinearCrossEntropy`, and more to come. The kernel works out of the box with [Flash Attention](https://github.com/Dao-AILab/flash-attention), [PyTorch FSDP](https://pytorch.org/tutorials/intermediate/FSDP_tutorial.html), and [Microsoft DeepSpeed](https://github.com/microsoft/DeepSpeed). We welcome contributions from the community to gather the best kernels for LLM training.
|
|
130
125
|
|
|
131
|
-
We've also added optimized Post-Training kernels that deliver **up to 80% memory savings** for alignment and distillation tasks. We support losses like DPO, CPO, ORPO, SimPO, JSD, and many more.
|
|
126
|
+
We've also added optimized Post-Training kernels that deliver **up to 80% memory savings** for alignment and distillation tasks. We support losses like DPO, CPO, ORPO, SimPO, JSD, and many more. Check out [how we optimize the memory](https://x.com/hsu_byron/status/1866577403918917655).
|
|
132
127
|
|
|
133
128
|
## Supercharge Your Model with Liger Kernel
|
|
134
129
|
|
|
@@ -145,6 +140,21 @@ With one line of code, Liger Kernel can increase throughput by more than 20% and
|
|
|
145
140
|
> - Benchmark conditions: LLaMA 3-8B, Batch Size = 8, Data Type = `bf16`, Optimizer = AdamW, Gradient Checkpointing = True, Distributed Strategy = FSDP1 on 8 A100s.
|
|
146
141
|
> - Hugging Face models start to OOM at a 4K context length, whereas Hugging Face + Liger Kernel scales up to 16K.
|
|
147
142
|
|
|
143
|
+
## Optimize Post Training with Liger Kernel
|
|
144
|
+
|
|
145
|
+
<p align="center">
|
|
146
|
+
<img src="https://raw.githubusercontent.com/linkedin/Liger-Kernel/main/docs/images/post-training.png" width="50%" alt="Post Training">
|
|
147
|
+
</p>
|
|
148
|
+
|
|
149
|
+
We provide optimized post training kernels like DPO, ORPO, SimPO, and more which can reduce memory usage by up to 80%. You can easily use them as python modules.
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
from liger_kernel.chunked_loss import LigerFusedLinearDPOLoss
|
|
153
|
+
orpo_loss = LigerFusedLinearORPOLoss()
|
|
154
|
+
y = orpo_loss(lm_head.weight, x, target)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
|
|
148
158
|
## Examples
|
|
149
159
|
|
|
150
160
|
| **Use Case** | **Description** |
|
|
@@ -202,11 +212,13 @@ To install from source:
|
|
|
202
212
|
```bash
|
|
203
213
|
git clone https://github.com/linkedin/Liger-Kernel.git
|
|
204
214
|
cd Liger-Kernel
|
|
215
|
+
|
|
216
|
+
# Install Default Dependencies
|
|
217
|
+
# Setup.py will detect whether you are using AMD or NVIDIA
|
|
205
218
|
pip install -e .
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
pip install -e .[transformers]
|
|
219
|
+
|
|
220
|
+
# Setup Development Dependencies
|
|
221
|
+
pip install -e ".[dev]"
|
|
210
222
|
```
|
|
211
223
|
|
|
212
224
|
|
|
@@ -252,7 +264,7 @@ model = transformers.AutoModelForCausalLM("path/to/llama/model")
|
|
|
252
264
|
|
|
253
265
|
### 3. Compose Your Own Model
|
|
254
266
|
|
|
255
|
-
You can take individual [kernels](#kernels) to compose your models.
|
|
267
|
+
You can take individual [kernels](https://github.com/linkedin/Liger-Kernel?tab=readme-ov-file#model-kernels) to compose your models.
|
|
256
268
|
|
|
257
269
|
```python
|
|
258
270
|
from liger_kernel.transformers import LigerFusedLinearCrossEntropyLoss
|
|
@@ -291,7 +303,7 @@ loss.backward()
|
|
|
291
303
|
| Gemma1 | `liger_kernel.transformers.apply_liger_kernel_to_gemma` | RoPE, RMSNorm, GeGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
|
|
292
304
|
| Gemma2 | `liger_kernel.transformers.apply_liger_kernel_to_gemma2` | RoPE, RMSNorm, GeGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
|
|
293
305
|
| Qwen2, Qwen2.5, & QwQ | `liger_kernel.transformers.apply_liger_kernel_to_qwen2` | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
|
|
294
|
-
| Qwen2-VL | `liger_kernel.transformers.apply_liger_kernel_to_qwen2_vl` | RMSNorm, LayerNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
|
|
306
|
+
| Qwen2-VL, & QVQ | `liger_kernel.transformers.apply_liger_kernel_to_qwen2_vl` | RMSNorm, LayerNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
|
|
295
307
|
| Phi3 & Phi3.5 | `liger_kernel.transformers.apply_liger_kernel_to_phi3` | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy |
|
|
296
308
|
|
|
297
309
|
|
|
@@ -340,16 +352,17 @@ loss.backward()
|
|
|
340
352
|
|
|
341
353
|
## Contributing, Acknowledgements, and License
|
|
342
354
|
|
|
343
|
-
- [Contributing Guidelines](https://github.com/linkedin/Liger-Kernel/blob/main/docs/
|
|
344
|
-
- [Acknowledgements](https://github.com/linkedin/Liger-Kernel/blob/main/docs/
|
|
345
|
-
- [License Information](https://github.com/linkedin/Liger-Kernel/blob/main/docs/
|
|
355
|
+
- [Contributing Guidelines](https://github.com/linkedin/Liger-Kernel/blob/main/docs/contributing.md)
|
|
356
|
+
- [Acknowledgements](https://github.com/linkedin/Liger-Kernel/blob/main/docs/acknowledgement.md)
|
|
357
|
+
- [License Information](https://github.com/linkedin/Liger-Kernel/blob/main/docs/license.md)
|
|
346
358
|
|
|
347
359
|
## Sponsorship and Collaboration
|
|
348
|
-
|
|
360
|
+
|
|
361
|
+
- [Glows.ai](https://platform.glows.ai/): Sponsoring NVIDIA GPUs for our open source developers.
|
|
349
362
|
- [AMD](https://www.amd.com/en.html): Providing AMD GPUs for our AMD CI.
|
|
350
363
|
- [Intel](https://www.intel.com/): Providing Intel GPUs for our Intel CI.
|
|
351
364
|
- [Modal](https://modal.com/): Free 3000 credits from GPU MODE IRL for our NVIDIA CI.
|
|
352
|
-
- [EmbeddedLLM](https://embeddedllm.com/): Making Liger Kernel run fast and stable on AMD.
|
|
365
|
+
- [EmbeddedLLM](https://embeddedllm.com/): Making Liger Kernel run fast and stable on AMD.
|
|
353
366
|
- [HuggingFace](https://huggingface.co/): Integrating Liger Kernel into Hugging Face Transformers and TRL.
|
|
354
367
|
- [Lightning AI](https://lightning.ai/): Integrating Liger Kernel into Lightning Thunder.
|
|
355
368
|
- [Axolotl](https://axolotl.ai/): Integrating Liger Kernel into Axolotl.
|