diff --git a/README.md b/README.md
index e14c2151..72464589 100644
--- a/README.md
+++ b/README.md
@@ -8,17 +8,18 @@ fastllm是纯c++实现,无第三方依赖的多平台高性能大模型推理
部署交流QQ群: 831641348
-| [快速开始](#快速开始) | [模型获取](#模型获取) |
+| [快速开始](#快速开始) | [模型获取](docs/models.md) |
## 功能概述
- 🚀 纯c++实现,便于跨平台移植,可以在安卓上直接编译
+- 🚀 无论ARM平台,X86平台,NVIDIA平台,速度都较快
- 🚀 支持读取Hugging face原始模型并直接量化
- 🚀 支持部署Openai api server
- 🚀 支持多卡部署,支持GPU + CPU混合部署
- 🚀 支持动态Batch,流式输出
- 🚀 前后端分离设计,便于支持新的计算设备
-- 🚀 目前支持ChatGLM系列模型,Qwen2系列模型,各种LLAMA模型(ALPACA, VICUNA等),BAICHUAN模型,MOSS模型,MINICPM模型等
+- 🚀 目前支持ChatGLM系列模型,Qwen系列模型,各种LLAMA模型(ALPACA, VICUNA等),BAICHUAN模型,MOSS模型,MINICPM模型等
## 快速开始
@@ -66,7 +67,7 @@ python3 -m ftllm.webui -t 16 -p ~/Qwen2-7B-Instruct/ --port 8080
目前模型的支持情况见: [模型列表](docs/models.md)
-有一些架构暂时无法直接读取Hugging face模型,可以参考 [模型转换文档](docs/convert_model.md) 转换fastllm格式的模型
+一些早期的HuggingFace模型无法直接读取,可以参考 [模型转换](docs/models.md#模型导出convert-offline) 转换fastllm格式的模型
### 运行demo程序 (c++)
diff --git a/docs/convert_model.md b/docs/convert_model.md
deleted file mode 100644
index 041d12c6..00000000
--- a/docs/convert_model.md
+++ /dev/null
@@ -1,96 +0,0 @@
-## 模型获取
-
-### 模型库
-
-可以在以下链接中下载已经转换好的模型
-
-[huggingface](https://huggingface.co/huangyuyang)
-
-### 模型导出
-
-#### ChatGLM模型导出 (默认脚本导出ChatGLM2-6b模型)
-
-``` sh
-# 需要先安装ChatGLM-6B环境
-# 如果使用自己finetune的模型需要修改chatglm_export.py文件中创建tokenizer, model的代码
-cd build
-python3 tools/chatglm_export.py chatglm2-6b-fp16.flm float16 #导出float16模型
-python3 tools/chatglm_export.py chatglm2-6b-int8.flm int8 #导出int8模型
-python3 tools/chatglm_export.py chatglm2-6b-int4.flm int4 #导出int4模型
-```
-
-#### baichuan模型导出 (默认脚本导出baichuan-13b-chat模型)
-
-``` sh
-# 需要先安装baichuan环境
-# 如果使用自己finetune的模型需要修改baichuan2flm.py文件中创建tokenizer, model的代码
-# 根据所需的精度,导出相应的模型
-cd build
-python3 tools/baichuan2flm.py baichuan-13b-fp16.flm float16 #导出float16模型
-python3 tools/baichuan2flm.py baichuan-13b-int8.flm int8 #导出int8模型
-python3 tools/baichuan2flm.py baichuan-13b-int4.flm int4 #导出int4模型
-```
-
-#### baichuan2模型导出 (默认脚本导出baichuan2-7b-chat模型)
-
-``` sh
-# 需要先安装baichuan2环境
-# 如果使用自己finetune的模型需要修改baichuan2_2flm.py文件中创建tokenizer, model的代码
-# 根据所需的精度,导出相应的模型
-cd build
-python3 tools/baichuan2_2flm.py baichuan2-7b-fp16.flm float16 #导出float16模型
-python3 tools/baichuan2_2flm.py baichuan2-7b-int8.flm int8 #导出int8模型
-python3 tools/baichuan2_2flm.py baichuan2-7b-int4.flm int4 #导出int4模型
-```
-
-#### MOSS模型导出
-
-``` sh
-# 需要先安装MOSS环境
-# 如果使用自己finetune的模型需要修改moss_export.py文件中创建tokenizer, model的代码
-# 根据所需的精度,导出相应的模型
-cd build
-python3 tools/moss_export.py moss-fp16.flm float16 #导出float16模型
-python3 tools/moss_export.py moss-int8.flm int8 #导出int8模型
-python3 tools/moss_export.py moss-int4.flm int4 #导出int4模型
-```
-
-#### LLAMA系列模型导出
-``` sh
-# 修改build/tools/alpaca2flm.py程序进行导出
-# 不同llama模型使用的指令相差很大,需要参照torch2flm.py中的参数进行配置
-```
-一些模型的转换可以[参考这里的例子](docs/llama_cookbook.md)
-
-#### QWEN模型导出
-* **Qwen**
-```sh
-# 需要先安装QWen环境
-# 如果使用自己finetune的模型需要修改qwen2flm.py文件中创建tokenizer, model的代码
-# 根据所需的精度,导出相应的模型
-cd build
-python3 tools/qwen2flm.py qwen-7b-fp16.flm float16 #导出float16模型
-python3 tools/qwen2flm.py qwen-7b-int8.flm int8 #导出int8模型
-python3 tools/qwen2flm.py qwen-7b-int4.flm int4 #导出int4模型
-```
-
-* **Qwen1.5**
-
-```sh
-# 需要先安装QWen2环境(transformers >= 4.37.0)
-# 根据所需的精度,导出相应的模型
-cd build
-python3 tools/llamalike2flm.py qwen1.5-7b-fp16.flm float16 "qwen/Qwen1.5-4B-Chat" #导出wen1.5-4B-Chat float16模型
-python3 tools/llamalike2flm.py qwen1.5-7b-int8.flm int8 "qwen/Qwen1.5-7B-Chat" #导出Qwen1.5-7B-Chat int8模型
-python3 tools/llamalike2flm.py qwen1.5-7b-int4.flm int4 "qwen/Qwen1.5-14B-Chat" #导出Qwen1.5-14B-Chat int4模型
-# 最后一个参数可替换为模型路径
-```
-
-#### MINICPM模型导出
-```sh
-# 需要先安装MiniCPM环境(transformers >= 4.36.0)
-# 默认脚本导出iniCPM-2B-dpo-fp16模型
-cd build
-python tools/minicpm2flm.py minicpm-2b-float16.flm #导出dpo-float16模型
-./main -p minicpm-2b-float16.flm # 执行模型
-```
\ No newline at end of file
diff --git a/docs/faq.md b/docs/faq.md
index 40d1e024..fec11fd0 100755
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -27,22 +27,14 @@ cmake .. -DUSE_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=native
**解决办法:**
-手动修改 CMakeLists.txt,根据GPU型号手动指定GPU的[Compute Capability](https://developer.nvidia.com/cuda-gpus)。如:
-
-``` diff
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -52,7 +52,7 @@
- #message(${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
- set(FASTLLM_CUDA_SOURCES src/devices/cuda/cudadevice.cpp src/devices/cuda/cudadevicebatch.cpp src/devices/cuda/fastllm-cuda.cu)
- set(FASTLLM_LINKED_LIBS ${FASTLLM_LINKED_LIBS} cublas)
-- set(CMAKE_CUDA_ARCHITECTURES "native")
-+ set(CMAKE_CUDA_ARCHITECTURES 61 75 86 89)
- endif()
-
- if (PY_API)
+根据GPU型号手动指定GPU的[Compute Capability](https://developer.nvidia.com/cuda-gpus)。如:
+
+```shell
+cmake .. -DUSE_CUDA=ON -DCUDA_ARCH="61;75;86;89"
```
+若需要支持多种GPU架构,请使用“;”分隔(如上面例子)。
+
### identifier "__hdiv" is undefined
**现象:**
diff --git a/docs/fastllm_pytools.md b/docs/fastllm_pytools.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/docs/llama_cookbook.md b/docs/llama_cookbook.md
index fc9bdcb1..d2d3bda6 100644
--- a/docs/llama_cookbook.md
+++ b/docs/llama_cookbook.md
@@ -238,7 +238,7 @@ XVERSE-13B-Chat V1 版本需要对输入做NFKC规范化,fastllm暂不支持
user_role="[|Human|]:", bot_role="\n[|AI|]:", history_sep="\n", dtype=dtype)
```
-## Yi
+### Yi
* 01-ai/[Yi-6B-Chat](https://huggingface.co/01-ai/Yi-6B-Chat)
@@ -249,6 +249,8 @@ XVERSE-13B-Chat V1 版本需要对输入做NFKC规范化,fastllm暂不支持
user_role="<|im_start|>user\n", bot_role="<|im_end|><|im_start|>assistant\n", history_sep="<|im_end|>\n", dtype=dtype)
```
+* [SUSTech/SUS-Chat-34B](https://huggingface.co/SUSTech/SUS-Chat-34B)
+
### WizardCoder
* [WizardCoder-Python-7B-V1.0](https://huggingface.co/WizardLM/WizardCoder-Python-7B-V1.0)
diff --git a/docs/models.md b/docs/models.md
index 7dfab9e5..dbecd853 100644
--- a/docs/models.md
+++ b/docs/models.md
@@ -1,15 +1,262 @@
-## 支持直接读取的模型
+# 支持的模型 Supported Models
-#### THUDM/glm-4-9b-chat
+## 说明
-#### meta-llama/Meta-Llama-3-8B-Instruct
+目前Fastllm加载模型有以下几种方式。
-#### meta-llama/Meta-Llama-3-70B-Instruct
+* **加载后转换(两行加速模式)** (convert on-the-fly)
+ 将原始模型加载为HuggingFace模型,再通过`from_hf()`方法,转换并加速,这种方法内存占用大且速度慢,目前不再推荐。
-#### Qwen/Qwen2-0.5B-Instruct
+* **离线转换** (convert offline)
+ 将原始模型转换为.flm格式的模型,一些[模型](#flm模型库)已经转换好。
-#### Qwen/Qwen2-1.5B-Instruct
+* **直接读取** (load from Huggingface .safetensors)
+ 直接读取HuggingFace上发布的模型,仅支持.safetensors格式的模型。
-#### Qwen/Qwen2-7B-Instruct
-#### Qwen/Qwen2-72B-Instruct
+## 支持模型一览 Model List
+
+
+* ✔ 表示支持该方式,并测试通过;
+ ✔ means supports this mode and passes the test.
+
+* ❌ 表示本应该支持该方式,但实际测试后发现本功能并不受支持,可能在后续版本修复;
+ ❌ means this method is supposed to be supported, but failed after actual testing.
+
+* √ 表示支持,但是还没有测试过。
+ √ means supported, but not tested.
+
+### GLM系列
+
+| 模型 | 加载后转换 | 离线转换 | 直接读取 |
+|-----------------: |------------|------------|------------|
+| THUDM/ChatGLM-6b | [✔](#chatglm系列) | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型) | |
+| THUDM/ChatGLM-6b-int8 | [✔](#Cchatglm系列) | ❌ | |
+| THUDM/ChatGLM-6b-int4 | [✔](#chatglm系列) | ❌ | |
+| THUDM/ChatGLM2-6b | [✔](#chatglm系列) | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型) | |
+| THUDM/glm-large-chinese | | [✔](tools\scripts/glm_export.py) | |
+| THUDM/ChatGLM2-6b-int8 | [✔](#chatglm系列) | ❌ | |
+| THUDM/ChatGLM2-6b-int4 | [✔](#chatglm系列) | ❌ | |
+| THUDM/ChatGLM2-6b-32k | [✔](#chatglm系列) | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型) | |
+| THUDM/ChatGLM3-6b | [✔](#chatglm系列) | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型) | |
+| THUDM/ChatGLM3-6b-32k | [✔](#chatglm系列) | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型) | |
+| THUDM/ChatGLM3-6b-128k | ❌ | ❌ | |
+| THUDM/glm-4-9b-chat | [✔](#chatglm系列) | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型) | ✔ |
+| THUDM/codegeex4-all-9b | [✔](#chatglm系列)2 | [✔](#chatglm模型导出-默认脚本导出chatglm2-6b模型)2 | ✔ |
+
+> 注2:需要手动设置 pre_prompt
+
+### Qwen系列
+
+| 模型 | 加载后转换 | 离线转换 | 直接读取 |
+|-------------------: |------------|------------|------------|
+| Qwen/Qwen-7B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | |
+| Qwen/Qwen-14B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | |
+| Qwen/Qwen-72B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | |
+| Qwen/Qwen-1_8B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | |
+| Qwen/Qwen1.5-0.5B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-1.8B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-4B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-7B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-14B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-72B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-32B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔3 |
+| Qwen/Qwen1.5-110B-Chat | [√](#其它模型) | [√](#qwen模型导出) | √3 |
+| Qwen/CodeQwen1.5-7B-Chat | [✔](#其它模型) | [✔](#qwen模型导出) | ✔ |
+| Qwen/Qwen2-0.5B-Instruct | [✔](#其它模型) | [✔](#qwen模型导出) | ✔ |
+| Qwen/Qwen2-1.5B-Instruct | [✔](#其它模型) | [✔](#qwen模型导出) | ✔ |
+| Qwen/Qwen2-7B-Instruct | [✔](#其它模型) | [✔](#qwen模型导出) | ✔ |
+| Qwen/Qwen2-72B-Instruct | | [✔](#qwen模型导出) | ✔ |
+
+> 注3: 需要更新,检查 tokenizer_config.json 是否为最新版本
+
+### DeepSeek系列
+
+| 模型 | 加载后转换 | 离线转换 | 直接读取 |
+|-------------------------------------------: |------------|------------|------------|
+| deepseek-ai/Deepseek-Coder-1.3B-Instruct | [✔](llama_cookbook.md#deepseek-coder) | [✔](llama_cookbook.md#deepseek-coder) | ❌4 |
+| deepseek-ai/Deepseek-Coder-6.7B-Instruct | [✔](llama_cookbook.md#deepseek-coder) | [✔](llama_cookbook.md#deepseek-coder) | ❌4 |
+| deepseek-ai/Deepseek-Coder-7B-Instruct v1.5 | [✔](llama_cookbook.md#deepseek-coder) | [✔](llama_cookbook.md#deepseek-coder) | ❌4 |
+| deepseek-ai/deepseek-coder-33b-instruct | [√](llama_cookbook.md#deepseek-coder) | [√](llama_cookbook.md#deepseek-coder) | ❌4 |
+| deepseek-ai/DeepSeek-V2-Chat | √ | ✔ | √4 |
+| deepseek-ai/DeepSeek-V2-Lite-Chat | √ | ✔ | √4 |
+| deepseek-ai/DeepSeek-Coder-V2-Instruct | √ | √ | √4 |
+| deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct | √ | √ | √4 |
+
+### LLaMA类模型
+
+| 模型 | 加载后转换 | 离线转换 | 直接读取 |
+|-----------------: |------------|------------|------------|
+| meta-llama/Llama-2-7b-chat-hf | [✔](llama_cookbook.md#llama2-chat) | [✔](llama_cookbook.md#llama2-chat) | |
+| meta-llama/Llama-2-13b-chat-hf | [✔](llama_cookbook.md#llama2-chat) | [✔](llama_cookbook.md#llama2-chat) | |
+| codellama/CodeLlama-7b-Instruct-hf | [✔](llama_cookbook.md#llama2-chat) | [✔](llama_cookbook.md#llama2-chat) | |
+| codellama/CodeLlama-13b-Instruct-hf | [✔](llama_cookbook.md#llama2-chat) | [✔](llama_cookbook.md#llama2-chat) | |
+| xverse/XVERSE-13B-Chat | [✔](llama_cookbook.md#xverse) | [✔](llama_cookbook.md#xverse) | |
+| xverse/XVERSE-7B-Chat | [✔](llama_cookbook.md#xverse) | [✔](llama_cookbook.md#xverse) | |
+| | | | |
+| internlm/internlm-chat-7b | [✔](llama_cookbook.md#internlm书生) | [✔](llama_cookbook.md#internlm书生) | |
+| internlm/internlm-chat-20b | [✔](llama_cookbook.md#internlm书生) | [✔](llama_cookbook.md#internlm书生) | |
+| internlm/internlm2-chat-1_8b | [✔](llama_cookbook.md#internlm书生) | [✔](llama_cookbook.md#internlm书生) | ❌4 |
+| internlm/internlm2-chat-7b | [✔](llama_cookbook.md#internlm书生) | [✔](llama_cookbook.md#internlm书生) | ❌4 |
+| internlm/internlm2-chat-20b | [✔](llama_cookbook.md#internlm书生) | [✔](llama_cookbook.md#internlm书生) | ❌4 |
+| | | | |
+| 01-ai/Yi-6B-Chat | [✔](llama_cookbook.md#yi) | [✔](llama_cookbook.md#yi) | ❌4 |
+| 01-ai/Yi-34B-Chat | [✔](llama_cookbook.md#yi) | [✔](llama_cookbook.md#yi) | ❌4 |
+| SUSTech/SUS-Chat-34B | [✔](llama_cookbook.md#llama2-chat) | [✔](llama_cookbook.md#llama2-chat) | |
+| | | | |
+| meta-llama/Meta-Llama-3-8B-Instruct | | [✔](tools/scripts/llama3_to_flm.py) | ✔ |
+| meta-llama/Meta-Llama-3-70B-Instruct | | [✔](tools/scripts/llama3_to_flm.py) | ✔ |
+
+> 注4: Python ftllm用AutoTokenizer而不使用Fastllm Tokenizer可以实现加载,但是C++程序尚不支持加载该模型的Tokenizer。
+
+### 其它模型
+
+| 模型 | 加载后转换 | 离线转换 | 直接读取 |
+|-----------------: |------------|------------|------------|
+| fnlp/moss-moon-003-sft | [✔]() | [✔](#moss模型导出) | |
+| fnlp/moss-moon-003-sft-plugin | [✔]() | [✔](#moss模型导出) | |
+| | | | |
+| baichuan-inc/baichuan-13b-chat | [✔](#其它模型) | [✔](#baichuan模型导出-默认脚本导出baichuan-13b-chat模型) | |
+| baichuan-inc/Baichuan2-7B-Chat | [✔](#其它模型) | [✔](#baichuan2模型导出-默认脚本导出baichuan2-7b-chat模型) | |
+| baichuan-inc/baichuan2-13b-chat | [✔](#其它模型) | [✔](#baichuan2模型导出-默认脚本导出baichuan2-7b-chat模型) | |
+| | | | |
+| openbmb/MiniCPM-2B-sft-fp16 | [✔](#其它模型) | [✔](#minicpm模型导出) | |
+| openbmb/MiniCPM-2B-dpo-fp16 | [✔](#其它模型) | [✔](#minicpm模型导出) | |
+
+
+### 加载后转换(两行加速模式)(convert on-the-fly)
+
+#### ChatGLM系列
+
+``` python
+# 这是原来的程序,通过huggingface接口创建模型
+from transformers import AutoTokenizer, AutoModel
+tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code = True)
+model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code = True)
+
+# 加入下面这两行,将huggingface模型转换成fastllm模型
+# 目前from_hf接口只能接受原始模型,或者ChatGLM的int4, int8量化模型,暂时不能转换其它量化模型
+from ftllm import llm
+model = llm.from_hf(model, tokenizer, dtype = "float16") # dtype支持 "float16", "int8", "int4"
+model = model.eval()
+```
+
+model支持了ChatGLM的API函数`chat()`, `stream_chat()`,因此ChatGLM的demo程序无需改动其他代码即可运行
+
+#### 其它模型
+
+``` python
+# 通过huggingface接口创建模型,参考每个模型readme.md中的加载方式
+from transformers import AutoTokenizer, AutoModelForCausalLM
+tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code = True)
+model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code = True)
+
+# 加入下面这两行,将huggingface模型转换成fastllm模型
+# 目前from_hf接口只能接受原始模型,或者ChatGLM的int4, int8量化模型,暂时不能转换其它量化模型
+from ftllm import llm
+model = llm.from_hf(model, tokenizer, dtype = "float16") # dtype支持 "float16", "int8", "int4"
+```
+ftllm实现了兼容Transformers的`generate()`方法。
+
+
+转好的模型也可以导出到本地文件,之后可以直接读取,也可以使用fastllm cpp接口读取
+
+``` python
+model.save("model.flm"); # 导出fastllm模型
+new_model = llm.model("model.flm"); # 导入flm模型
+```
+
+### flm模型库
+
+可以在以下链接中找到一部分已经转换好的模型
+
+[huggingface](https://huggingface.co/huangyuyang) [modelscope](https://modelscope.cn/profile/huangyuyang)
+
+### 模型导出(convert offline)
+
+#### ChatGLM模型导出 (默认脚本导出ChatGLM2-6b模型)
+
+``` sh
+# 需要先安装ChatGLM-6B环境
+# 如果使用自己finetune的模型需要修改chatglm_export.py文件中创建tokenizer, model的代码
+cd build
+python3 tools/chatglm_export.py chatglm2-6b-fp16.flm float16 #导出float16模型
+python3 tools/chatglm_export.py chatglm2-6b-int8.flm int8 #导出int8模型
+python3 tools/chatglm_export.py chatglm2-6b-int4.flm int4 #导出int4模型
+```
+
+#### baichuan模型导出 (默认脚本导出baichuan-13b-chat模型)
+
+``` sh
+# 需要先安装baichuan环境
+# 如果使用自己finetune的模型需要修改baichuan2flm.py文件中创建tokenizer, model的代码
+# 根据所需的精度,导出相应的模型
+cd build
+python3 tools/baichuan2flm.py baichuan-13b-fp16.flm float16 #导出float16模型
+python3 tools/baichuan2flm.py baichuan-13b-int8.flm int8 #导出int8模型
+python3 tools/baichuan2flm.py baichuan-13b-int4.flm int4 #导出int4模型
+```
+
+#### baichuan2模型导出 (默认脚本导出baichuan2-7b-chat模型)
+
+``` sh
+# 需要先安装baichuan2环境
+# 如果使用自己finetune的模型需要修改baichuan2_2flm.py文件中创建tokenizer, model的代码
+# 根据所需的精度,导出相应的模型
+cd build
+python3 tools/baichuan2_2flm.py baichuan2-7b-fp16.flm float16 #导出float16模型
+python3 tools/baichuan2_2flm.py baichuan2-7b-int8.flm int8 #导出int8模型
+python3 tools/baichuan2_2flm.py baichuan2-7b-int4.flm int4 #导出int4模型
+```
+
+#### MOSS模型导出
+
+``` sh
+# 需要先安装MOSS环境
+# 如果使用自己finetune的模型需要修改moss_export.py文件中创建tokenizer, model的代码
+# 根据所需的精度,导出相应的模型
+cd build
+python3 tools/moss_export.py moss-fp16.flm float16 #导出float16模型
+python3 tools/moss_export.py moss-int8.flm int8 #导出int8模型
+python3 tools/moss_export.py moss-int4.flm int4 #导出int4模型
+```
+
+#### LLAMA系列模型导出
+``` sh
+# 修改build/tools/alpaca2flm.py程序进行导出
+# 不同llama模型使用的指令相差很大,需要参照torch2flm.py中的参数进行配置
+```
+一些模型的转换可以[参考这里的例子](llama_cookbook.md)
+
+#### QWEN模型导出
+* **Qwen**
+```sh
+# 需要先安装QWen环境
+# 如果使用自己finetune的模型需要修改qwen2flm.py文件中创建tokenizer, model的代码
+# 根据所需的精度,导出相应的模型
+cd build
+python3 tools/qwen2flm.py qwen-7b-fp16.flm float16 #导出float16模型
+python3 tools/qwen2flm.py qwen-7b-int8.flm int8 #导出int8模型
+python3 tools/qwen2flm.py qwen-7b-int4.flm int4 #导出int4模型
+```
+
+* **Qwen1.5**
+
+```sh
+# 需要先安装QWen2环境(transformers >= 4.37.0)
+# 根据所需的精度,导出相应的模型
+cd build
+python3 tools/llamalike2flm.py qwen1.5-7b-fp16.flm float16 "qwen/Qwen1.5-4B-Chat" #导出wen1.5-4B-Chat float16模型
+python3 tools/llamalike2flm.py qwen1.5-7b-int8.flm int8 "qwen/Qwen1.5-7B-Chat" #导出Qwen1.5-7B-Chat int8模型
+python3 tools/llamalike2flm.py qwen1.5-7b-int4.flm int4 "qwen/Qwen1.5-14B-Chat" #导出Qwen1.5-14B-Chat int4模型
+# 最后一个参数可替换为模型路径
+```
+
+#### MINICPM模型导出
+```sh
+# 需要先安装MiniCPM环境(transformers >= 4.36.0)
+# 默认脚本导出iniCPM-2B-dpo-fp16模型
+cd build
+python tools/minicpm2flm.py minicpm-2b-float16.flm #导出dpo-float16模型
+./main -p minicpm-2b-float16.flm # 执行模型
+```
\ No newline at end of file
diff --git a/include/utils/utils.h b/include/utils/utils.h
index 0721bbb6..4e258119 100644
--- a/include/utils/utils.h
+++ b/include/utils/utils.h
@@ -14,7 +14,11 @@
#include
#include
#include
+#if defined(__GNUC__) && __GNUC__ < 8
+#include
+#else
#include
+#endif
#if defined(_WIN32) or defined(_WIN64)
#include
@@ -32,7 +36,7 @@
#endif
#endif
-#if defined(_MSC_VER) && _MSC_VER <= 1900 // VS 2015
+#if (defined(_MSC_VER) && _MSC_VER <= 1900) || (defined(__GNUC__) && __GNUC__ < 8) // VS 2015)
namespace fs = std::experimental::filesystem;
#else
namespace fs = std::filesystem;