Skip to content

Commit

Permalink
rebase (#1714)
Browse files Browse the repository at this point in the history
rebase

fix notes
  • Loading branch information
openvino-dev-samples authored Feb 19, 2024
1 parent b5a4994 commit 8b2ad4c
Show file tree
Hide file tree
Showing 7 changed files with 246 additions and 461 deletions.
4 changes: 4 additions & 0 deletions .ci/spellcheck/.pyspelling.wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ AutoTokenizer
backend
backends
Baevski
Baichuan
baichuan
BaseSpeakerTTS
BasicUNet
bboxes
Expand Down Expand Up @@ -551,6 +553,7 @@ PyTorchVideo
QFormer
Qianwen
Qi
QKV
qrcode
quant
quantized
Expand Down Expand Up @@ -687,6 +690,7 @@ surya
svc
SVTR
Swin
SwiGLU
SwinV
TaskManager
TartanAir
Expand Down
280 changes: 110 additions & 170 deletions notebooks/254-llm-chatbot/254-llm-chatbot.ipynb

Large diffs are not rendered by default.

360 changes: 97 additions & 263 deletions notebooks/254-llm-chatbot/254-rag-chatbot.ipynb

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions notebooks/254-llm-chatbot/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,18 @@ The available options are:
* **tiny-llama-1b-chat** - This is the chat model finetuned on top of [TinyLlama/TinyLlama-1.1B-intermediate-step-1431k-3T](https://huggingface.co/TinyLlama/TinyLlama-1.1B-intermediate-step-1431k-3T). The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion tokens with the adoption of the same architecture and tokenizer as Llama 2. This means TinyLlama can be plugged and played in many open-source projects built upon Llama. Besides, TinyLlama is compact with only 1.1B parameters. This compactness allows it to cater to a multitude of applications demanding a restricted computation and memory footprint. More details about model can be found in [model card](https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0).
* **mini-cpm-2b-dpo** - MiniCPM is an End-Size LLM developed by ModelBest Inc. and TsinghuaNLP, with only 2.4B parameters excluding embeddings. After Direct Preference Optimization (DPO) fine-tuning, MiniCPM outperforms many popular 7b, 13b and 70b models. More details can be found in [model_card](https://huggingface.co/openbmb/MiniCPM-2B-dpo-fp16).
* **red-pajama-3b-chat** - A 2.8B parameter pretrained language model based on GPT-NEOX architecture. It was developed by Together Computer and leaders from the open-source AI community. The model is fine-tuned on OASST1 and Dolly2 datasets to enhance chatting ability. More details about model can be found in [HuggingFace model card](https://huggingface.co/togethercomputer/RedPajama-INCITE-Chat-3B-v1).
* **llama-2-7b-chat** - LLama 2 is the second generation of LLama models developed by Meta. Llama 2 is a collection of pretrained and fine-tuned generative text models ranging in scale from 7 billion to 70 billion parameters. llama-2-7b-chat is 7 billions parameters version of LLama 2 finetuned and optimized for dialogue use case. More details about model can be found in the [paper](https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/), [repository](https://github.com/facebookresearch/llama) and [HuggingFace model card](https://huggingface.co/meta-llama/Llama-2-7b-chat-hf)
* **llama-2-7b-chat** - LLama 2 is the second generation of LLama models developed by Meta. Llama 2 is a collection of pretrained and fine-tuned generative text models ranging in scale from 7 billion to 70 billion parameters. llama-2-7b-chat is 7 billions parameters version of LLama 2 finetuned and optimized for dialogue use case. More details about model can be found in the [paper](https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/), [repository](https://github.com/facebookresearch/llama) and [HuggingFace model card](https://huggingface.co/meta-llama/Llama-2-7b-chat-hf).
* **qwen1.5-7b-chat** - Qwen1.5 is the beta version of Qwen2, a transformer-based decoder-only language model pretrained on a large amount of data. Qwen1.5 is a language model series including decoder language models of different model sizes. It is based on the Transformer architecture with SwiGLU activation, attention QKV bias, group query attention, mixture of sliding window attention and full attention. You can find more details about model in the [model card](https://huggingface.co/Qwen/Qwen1.5-7B-Chat).
>**Note**: run model with demo, you will need to accept license agreement.
>You must be a registered user in 🤗 Hugging Face Hub. Please visit [HuggingFace model card](https://huggingface.co/meta-llama/Llama-2-7b-chat-hf), carefully read terms of usage and click accept button. You will need to use an access token for downloading model. For more information on access tokens, refer to [this section of the documentation](https://huggingface.co/docs/hub/security-tokens).
* **mpt-7b-chat** - MPT-7B is part of the family of MosaicPretrainedTransformer (MPT) models, which use a modified transformer architecture optimized for efficient training and inference. These architectural changes include performance-optimized layer implementations and the elimination of context length limits by replacing positional embeddings with Attention with Linear Biases ([ALiBi](https://arxiv.org/abs/2108.12409)). Thanks to these modifications, MPT models can be trained with high throughput efficiency and stable convergence. MPT-7B-chat is a chatbot-like model for dialogue generation. It was built by finetuning MPT-7B on the [ShareGPT-Vicuna](https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered), [HC3](https://huggingface.co/datasets/Hello-SimpleAI/HC3), [Alpaca](https://huggingface.co/datasets/tatsu-lab/alpaca), [HH-RLHF](https://huggingface.co/datasets/Anthropic/hh-rlhf), and [Evol-Instruct](https://huggingface.co/datasets/victor123/evol_instruct_70k) datasets. More details about model can be found in [blog post](https://www.mosaicml.com/blog/mpt-7b), [repository](https://github.com/mosaicml/llm-foundry/) and [HuggingFace model card](https://huggingface.co/mosaicml/mpt-7b-chat).
* **qwen-7b-chat** - Qwen-7B is the 7B-parameter version of the large language model series, Qwen (abbr. Tongyi Qianwen), proposed by Alibaba Cloud. Qwen-7B is a Transformer-based large language model, which is pretrained on a large volume of data, including web texts, books, codes, etc. For more details about Qwen, please refer to the [GitHub](https://github.com/QwenLM/Qwen) code repository.
* **chatglm3-6b** - ChatGLM3-6B is the latest open-source model in the ChatGLM series. While retaining many excellent features such as smooth dialogue and low deployment threshold from the previous two generations, ChatGLM3-6B employs a more diverse training dataset, more sufficient training steps, and a more reasonable training strategy. ChatGLM3-6B adopts a newly designed [Prompt format](https://github.com/THUDM/ChatGLM3/blob/main/PROMPT_en.md), in addition to the normal multi-turn dialogue. You can find more details about model in the [model card](https://huggingface.co/THUDM/chatglm3-6b)
* **mistral-7b** - The Mistral-7B-v0.1 Large Language Model (LLM) is a pretrained generative text model with 7 billion parameters. You can find more details about model in the [paper](https://arxiv.org/abs/2310.06825) and [release blog post](https://mistral.ai/news/announcing-mistral-7b/).
* **zephyr-7b-beta** - Zephyr is a series of language models that are trained to act as helpful assistants. Zephyr-7B-beta is the second model in the series, and is a fine-tuned version of [mistralai/Mistral-7B-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1) that was trained on on a mix of publicly available, synthetic datasets using [Direct Preference Optimization (DPO)](https://arxiv.org/abs/2305.18290). You can find more details about model in [technical report](https://arxiv.org/abs/2310.16944) and [HuggingFace model card](https://huggingface.co/HuggingFaceH4/zephyr-7b-beta).
* **neural-chat-7b-v3-1** - Mistral-7b model fine-tuned using Intel Gaudi. The model fine-tuned on the open source dataset [Open-Orca/SlimOrca](https://huggingface.co/datasets/Open-Orca/SlimOrca) and aligned with [Direct Preference Optimization (DPO) algorithm](https://arxiv.org/abs/2305.18290). More details can be found in [model card](https://huggingface.co/Intel/neural-chat-7b-v3-3) and [blog post](https://medium.com/@NeuralCompressor/the-practice-of-supervised-finetuning-and-direct-preference-optimization-on-habana-gaudi2-a1197d8a3cd3).
* **notus-7b-v1** - Notus is a collection of fine-tuned models using [Direct Preference Optimization (DPO)](https://arxiv.org/abs/2305.18290). and related [RLHF](https://huggingface.co/blog/rlhf) techniques. This model is the first version, fine-tuned with DPO over zephyr-7b-sft. Following a data-first approach, the only difference between Notus-7B-v1 and Zephyr-7B-beta is the preference dataset used for dDPO. Proposed approach for dataset creation helps to effectively fine-tune Notus-7b that surpasses Zephyr-7B-beta and Claude 2 on [AlpacaEval](https://tatsu-lab.github.io/alpaca_eval/). More details about model can be found in [model card](https://huggingface.co/argilla/notus-7b-v1).
* **youri-7b-chat** - Youri-7b-chat is a Llama2 based model. [Rinna Co., Ltd.](https://rinna.co.jp/) conducted further pre-training for the Llama2 model with a mixture of English and Japanese datasets to improve Japanese task capability. The model is publicly released on Hugging Face hub. You can find detailed information at the [rinna/youri-7b-chat project page](https://huggingface.co/rinna/youri-7b).
* **youri-7b-chat** - Youri-7b-chat is a Llama2 based model. [Rinna Co., Ltd.](https://rinna.co.jp/) conducted further pre-training for the Llama2 model with a mixture of English and Japanese datasets to improve Japanese task capability. The model is publicly released on Hugging Face hub. You can find detailed information at the [rinna/youri-7b-chat project page](https://huggingface.co/rinna/youri-7b).
* **baichuan2-7b-chat** - Baichuan 2 is the new generation of large-scale open-source language models launched by [Baichuan Intelligence inc](https://www.baichuan-ai.com/home). It is trained on a high-quality corpus with 2.6 trillion tokens and has achieved the best performance in authoritative Chinese and English benchmarks of the same size.

The image below illustrates the provided user instruction and model answer examples.

Expand Down
21 changes: 17 additions & 4 deletions notebooks/254-llm-chatbot/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,14 +129,13 @@ def youri_partial_text_processor(partial_text, new_text):
Context: {context}
Answer: <im_end><|im_start|>assistant""",
},
"qwen-7b-chat": {
"model_id": "Qwen/Qwen-7B-Chat",
"remote": True,
"qwen1.5-7b-chat": {
"model_id": "Qwen/Qwen1.5-7B-Chat",
"remote": False,
"start_message": f"<|im_start|>system\n {DEFAULT_SYSTEM_PROMPT_CHINESE }<|im_end|>",
"history_template": "<|im_start|>user\n{user}<im_end><|im_start|>assistant\n{assistant}<|im_end|>",
"current_message_template": '"<|im_start|>user\n{user}<im_end><|im_start|>assistant\n{assistant}',
"stop_tokens": ["<|im_end|>", "<|endoftext|>"],
"revision": "2abd8e5777bb4ce9c8ab4be7dbbd0fe4526db78d",
"prompt_template": f"""<|im_start|>system
{DEFAULT_RAG_PROMPT_CHINESE }<|im_end|>"""
+ """
Expand Down Expand Up @@ -224,6 +223,20 @@ def youri_partial_text_processor(partial_text, new_text):
"tokenizer_kwargs": {"add_special_tokens": False},
"partial_text_processor": youri_partial_text_processor,
},
"baichuan2-7b-chat": {
"model_id": "baichuan-inc/Baichuan2-7B-Chat",
"remote": True,
"start_message": f"{DEFAULT_SYSTEM_PROMPT_CHINESE }",
"roles": [195, 196],
"tokenizer_kwargs": {"add_special_tokens": False},
"stop_tokens": [2],
"prompt_template": f"""{DEFAULT_RAG_PROMPT_CHINESE }"""
+ """
问题: {question}
已知内容: {context}
回答:
""",
},
}

SUPPORTED_EMBEDDING_MODELS = {
Expand Down
26 changes: 9 additions & 17 deletions notebooks/254-llm-chatbot/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
def register_configs():
from optimum.exporters.tasks import TasksManager
TasksManager._SUPPORTED_MODEL_TYPE["minicpm"] = TasksManager._SUPPORTED_MODEL_TYPE["llama"]
TasksManager._SUPPORTED_MODEL_TYPE["qwen2"] = TasksManager._SUPPORTED_MODEL_TYPE["llama"]

def patch_stateful(ov_model, model_type):
key_value_input_names = [
Expand Down Expand Up @@ -142,48 +143,39 @@ def ts_patched_forward(
del pt_model


def _update_qwen_rotary_embedding_cache(model):
model.transformer.rotary_emb(2048)


def convert_qwen(pt_model: torch.nn.Module, model_path: Path):
def convert_baichuan(pt_model: torch.nn.Module, model_path: Path):
"""
Qwen model conversion function
Baichuan model conversion function
Params:
pt_model: PyTorch model
model_path: path for saving model
Returns:
None
"""
_update_qwen_rotary_embedding_cache(pt_model)
ov_out_path = Path(model_path) / "openvino_model.xml"
pt_model.config.save_pretrained(ov_out_path.parent)
pt_model.config.use_cache = True
outs = pt_model(
input_ids=torch.ones((1, 10), dtype=torch.long),
attention_mask=torch.ones((1, 10), dtype=torch.long),
)
inputs = ["input_ids"]
inputs = ["input_ids", "attention_mask"]
outputs = ["logits"]

dynamic_shapes = {
"input_ids": {0: "batch_size", 1: "seq_len"},
"attention_mask": {0: "batch_size", 1: "seq_len"},
"token_type_ids": {0: "batch_size", 1: "seq_len"},
}
for idx in range(len(outs.past_key_values)):
inputs.extend([f"past_key_values.{idx}.key", f"past_key_values.{idx}.value"])
dynamic_shapes[inputs[-1]] = {0: "batch_size", 1: "past_sequence + sequence"}
dynamic_shapes[inputs[-2]] = {0: "batch_size", 1: "past_sequence + sequence"}
dynamic_shapes[inputs[-1]] = {0: "batch_size", 2: "past_sequence + sequence"}
dynamic_shapes[inputs[-2]] = {0: "batch_size", 2: "past_sequence + sequence"}
outputs.extend([f"present.{idx}.key", f"present.{idx}.value"])

inputs += ["attention_mask", "token_type_ids"]
dummy_inputs = {
"input_ids": torch.ones((1, 2), dtype=torch.long),
"past_key_values": outs.past_key_values,
"attention_mask": torch.ones((1, 12), dtype=torch.long),
"token_type_ids": torch.ones((1, 2), dtype=torch.long),
"past_key_values": outs.past_key_values,
}
pt_model.config.torchscript = True
ov_model = ov.convert_model(pt_model, example_input=dummy_inputs)
Expand All @@ -205,7 +197,7 @@ def convert_qwen(pt_model: torch.nn.Module, model_path: Path):

ov_model.validate_nodes_and_infer_types()
if make_stateful is not None:
patch_stateful(ov_model, "qwen")
patch_stateful(ov_model, "baichuan")
ov.save_model(ov_model, ov_out_path)
del ov_model
cleanup_torchscript_cache()
Expand Down Expand Up @@ -410,8 +402,8 @@ def convert_bert(pt_model: torch.nn.Module, model_path: Path):
converters = {
# LLM models
"mpt": convert_mpt,
"qwen": convert_qwen,
"chatglm3": convert_chatglm,
"baichuan2": convert_baichuan,
# embedding models
"all-mpnet-base-v2": convert_mpnet,
"text2vec-large-chinese": convert_bert,
Expand Down
9 changes: 5 additions & 4 deletions notebooks/254-llm-chatbot/ov_llm_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ def _from_pretrained(
)


class OVQWENModel(OVModelForCausalLM):
class OVBAICHUANModel(OVModelForCausalLM):
"""
Optimum intel compatible model wrapper for QWEN
"""
Expand All @@ -219,7 +219,7 @@ def __init__(
model_save_dir: Optional[Union[str, Path]] = None,
**kwargs,
):
NormalizedConfigManager._conf["qwen"] = NormalizedTextConfig.with_args(
NormalizedConfigManager._conf["baichuan"] = NormalizedTextConfig.with_args(
num_layers="num_hidden_layers",
num_attention_heads="num_attention_heads",
hidden_size="hidden_size",
Expand Down Expand Up @@ -270,12 +270,13 @@ def _from_pretrained(
)

model = cls.load_model(model_cache_path, load_in_8bit=load_in_8bit)
init_cls = OVQWENModel
init_cls = OVBAICHUANModel

return init_cls(
model=model, config=config, model_save_dir=model_cache_path.parent, **kwargs
)


class OVCHATGLMModel(OVModelForCausalLM):
"""
Optimum intel compatible model wrapper for CHATGLM2
Expand Down Expand Up @@ -364,6 +365,6 @@ def _from_pretrained(

model_classes = {
"mpt": OVMPTModel,
"qwen": OVQWENModel,
"baichuan2": OVBAICHUANModel,
"chatglm3": OVCHATGLMModel,
}

0 comments on commit 8b2ad4c

Please sign in to comment.