From 19283f57c8ee6539f40aa13257df1ed86b48553b Mon Sep 17 00:00:00 2001 From: Yu Li Date: Fri, 1 Dec 2023 21:12:39 -0600 Subject: [PATCH] publish 2.0.0 --- air_llm/README.md | 41 ++++++++++++++++++++++++++-- air_llm/setup.py | 2 +- assets/airllm2_time_improvement.png | Bin 0 -> 45965 bytes 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 assets/airllm2_time_improvement.png diff --git a/air_llm/README.md b/air_llm/README.md index 3ee1381..39098bb 100644 --- a/air_llm/README.md +++ b/air_llm/README.md @@ -2,10 +2,19 @@ AirLLM optimizes inference memory usage, allowing 70B large language models to r AirLLM优化inference内存,4GB单卡GPU可以运行70B大语言模型推理。不需要任何损失模型性能的量化和蒸馏,剪枝等模型压缩。 +## Updates + + +[2023/12/01] airllm 2.0. Support compressions: **3x run time speed up!** + +[2023/11/20] airllm Initial verion! + + + ## Quickstart -### install package +### 1. install package First, install airllm pip package. @@ -20,7 +29,7 @@ pip install airllm pip install -i https://pypi.org/simple/ airllm ``` -### Inference +### 2. Inference Then, initialize AirLLMLlama2, pass in the huggingface repo ID of the model being used, or the local path, and inference can be performed similar to a regular transformer model. @@ -69,6 +78,34 @@ Note: During inference, the original model will first be decomposed and saved la 注意:推理过程会首先将原始模型按层分拆,转存。请保证huggingface cache目录有足够的磁盘空间。 + +### 3. Compression - 3x Inference Speed! + +We just added model compression based on block-wise quantization based model compression. Which can further **speed up the inference speed** for up to **3x** , with almost ignorable accuracy loss(see more performance evaluation and why we use block-wise quantization in [this paper](https://arxiv.org/abs/2212.09720))! + +![speed_improvement](https://github.com/lyogavin/Anima/blob/main/assets/airllm2_time_improvement.png?raw=true) + +#### how to enalbe model compression speed up: + +* Step 1. make sure you have [bitsandbytes](https://github.com/TimDettmers/bitsandbytes) installed by `pip install -U bitsandbytes ` +* Step 2. make sure airllm verion later than 2.0.0: `pip install -U airllm` +* Step 3. when initialize the model, passing the argument compression ('4bit' or '8bit'): + +```python +model = AirLLMLlama2("garage-bAInd/Platypus2-70B-instruct" + compression='4bit' # specify '8bit' for 8-bit block-wise quantization + ) +``` + +### 4. All supported configurations + +When initialize the model, we support the following configurations: + +* **compression**: supported options: 4bit, 8bit for 4-bit or 8-bit block-wise quantization, or by default None for no compression +* **profiling_mode**: supported options: True to output time consumptions or by default False +* **layer_shards_saving_path**: optionally another path to save the splitted model + + ## Acknowledgement A lot of the code are based on SimJeg's great work in the Kaggle exam competition. Big shoutout to SimJeg: diff --git a/air_llm/setup.py b/air_llm/setup.py index 9f39a4d..6297fad 100644 --- a/air_llm/setup.py +++ b/air_llm/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r") as fh: setuptools.setup( name="airllm", - version="0.9.5", + version="2.0.0", author="Gavin Li", author_email="gavinli@animaai.cloud", description="AirLLM allows single 4GB GPU card to run 70B large language models without quantization, distillation or pruning.", diff --git a/assets/airllm2_time_improvement.png b/assets/airllm2_time_improvement.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ef9d8954c8fd8c930c46829eb1246f42b70685 GIT binary patch literal 45965 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 literal 0 HcmV?d00001