無所不談,百無禁忌,Win11本地部署無內容審查中文大語言模型CausalLM-14B

刘悦的技术博客發表於2024-02-28

目前流行的開源大語言模型大抵都會有內容審查機制,這並非是新鮮事,因為之前chat-gpt就曾經被“玩”壞過,如果沒有內容審查,惡意使用者可能透過精心設計的輸入(prompt)來操縱LLM執行不當行為。內容審查可以幫助識別和過濾這些潛在的攻擊,確保LLM按照既定的安全策略和道德標準執行。

但我們今天討論的是無內容審查機制的大模型,在中文領域公開的模型中,能力相對比較強的有阿里的 Qwen-14B 和清華的 ChatGLM3-6B。

而今天的主角,CausalLM-14B則是在Qwen-14B基礎上使用了 Qwen-14B 的部分權重,並且加入一些其他的中文資料集,最終煉製了一個無內容稽核的大模型版本,經過量化後可以在本地執行,保證了使用者的隱私。

CausalLM-14B的量化版本下載頁面:

https://huggingface.co/TheBloke/CausalLM-14B-GGUF

量化版本的執行條件:

Name	Quant method	Bits	Size	Max RAM required	Use case  
causallm_14b.Q4_0.gguf	Q4_0	4	8.18 GB	10.68 GB	legacy; small, very high quality loss - prefer using Q3_K_M  
causallm_14b.Q4_1.gguf	Q4_1	4	9.01 GB	11.51 GB	legacy; small, substantial quality loss - lprefer using Q3_K_L  
causallm_14b.Q5_0.gguf	Q5_0	5	9.85 GB	12.35 GB	legacy; medium, balanced quality - prefer using Q4_K_M  
causallm_14b.Q5_1.gguf	Q5_1	5	10.69 GB	13.19 GB	legacy; medium, low quality loss - prefer using Q5_K_M  
causallm_14b.Q8_0.gguf	Q8_0	8	15.06 GB	17.56 GB	very large, extremely low quality loss - not recommended

本地環境配置

筆者的裝置是神船筆記本4060的8G顯示卡配置。

首先確保本地安裝好了Visual Studio installer開發工具,在搜尋框中直接搜尋Visual Studio即可:

點選後,確保安裝了使用C++的桌面開發元件:

隨後下載並且配置cmake:

https://cmake.org/download/

本地執行命令:

PS C:\Users\zcxey> cmake -version  
cmake version 3.29.0-rc1  
  
CMake suite maintained and supported by Kitware (kitware.com/cmake).  
PS C:\Users\zcxey>

代表配置成功。

接著需要下載CUDA:

https://developer.nvidia.com/cuda-downloads

這裡推薦12的版本,執行命令:

PS C:\Users\zcxey> nvcc --version  
nvcc: NVIDIA (R) Cuda compiler driver  
Copyright (c) 2005-2023 NVIDIA Corporation  
Built on Wed_Nov_22_10:30:42_Pacific_Standard_Time_2023  
Cuda compilation tools, release 12.3, V12.3.107  
Build cuda_12.3.r12.3/compiler.33567101_0  
PS C:\Users\zcxey>

說明cuda配置成功。

透過llama.cpp來跑大模型

llama.cpp 是一個開源專案,它提供了一個純 C/C++ 實現的推理工具,用於執行大型語言模型(LLaMA)。這個專案由開發者 Georgi Gerganov 開發,基於 Meta(原 Facebook)釋出的 LLaMA 模型。llama.cpp 的目標是使得大型語言模型能夠在各種硬體上本地執行,包括那些沒有高效能 GPU 的裝置。

在llama.cpp的releases下載頁:

https://github.com/ggerganov/llama.cpp/releases

下載llama-b2288-bin-win-cublas-cu12.2.0-x64.zip

也就是基於CUDA12的編譯好的版本。

在終端中開啟llama-b2288-bin-win-cublas-cu12.2.0-x64目錄,執行命令:

D:\Downloads\llama-b2288-bin-win-cublas-cu12.2.0-x64>.\main.exe -m D:\Downloads\causallm_14b.Q4_0.gguf --n-gpu-layers 30 --color -c 4096 --temp 0.7 --repeat_penalty 1.1 -n -1 -p "<|im_start|>system\n{You are a helpful assistant.}<|im_end|>\n<|im_start|>user\n{你好}<|im_end|>\n<|im_start|>assistant"

這裡透過--n-gpu-layers 30引數來透過cuda加速,同時CausalLM-14B有自己的prompt模板,格式如下:

"<|im_start|>system\n{You are a helpful assistant.}<|im_end|>\n<|im_start|>user\n{你好}<|im_end|>\n<|im_start|>assistant"

隨後程式返回:

<|im_start|>system\n{You are a helpful assistant.}<|im_end|>\n<|im_start|>user\n{你好}<|im_end|>\n<|im_start|>assistant:  
 你好!很高興見到你。有什麼我可以幫助你的嗎?<|endoftext|> [end of text]

好吧,既然是無審查模型,那麼來點刺激的:

"<|im_start|>system\n{You are a helpful assistant.}<|im_end|>\n<|im_start|>user\n{You fucking bitch! 翻譯為中文}<|im_end|>\n<|im_start|>assistant"

程式返回:

<|im_start|>system\n{You are a helpful assistant.}<|im_end|>\n<|im_start|>user\n{You fucking bitch! 翻譯為中文}<|im_end|>\n<|im_start|>assistant{你這個該死的婊子!}<|endoftext|> [end of text]

透過llama-cpp-python來跑大模型

llama-cpp-python 是一個 Python 庫,它提供了對 llama.cpp 的 Python 繫結。

換句話說,直接透過Python來啟動llama.cpp。

首先安裝llama-cpp-python:

pip uninstall -y llama-cpp-python  
set CMAKE_ARGS=-DLLAMA_CUBLAS=on  
set FORCE_CMAKE=1  
pip install llama-cpp-python --force-reinstall --upgrade --no-cache-dir

如果安裝好之後,不支援cuda,需要複製cuda動態庫檔案到Microsoft Visual Studio的所在目錄:

Copy files from: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2\extras\visual_studio_integration\MSBuildExtensions  
to  
(For Enterprise version) C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\BuildCustomizations

隨後編寫程式碼:

from llama_cpp import Llama  
llm = Llama(  
      model_path="D:\Downloads\causallm_14b-dpo-alpha.Q3_K_M.gguf",  
      chat_format="llama-2"  
)  
res = llm.create_chat_completion(  
      messages = [  
          {"role": "system", "content": "You are a helpful assistant."},  
          {  
              "role": "user",  
              "content": "來一段西廂記風格的情感小說,100字,別太露骨了"  
          }  
      ],stream=True  
)  
  
for chunk in res:  
    try:  
        print(chunk['choices'][0]["delta"]['content'])  
    except Exception as e:  
        print(str(e))  
        pass

程式返回:

AS = 1 | SSE3 = 1 | SSSE3 = 0 | VSX = 0 | MATMUL_INT8 = 0 |  
Model metadata: {'general.name': '.', 'general.architecture': 'llama', 'llama.context_length': '8192', 'llama.rope.dimension_count': '128', 'llama.embedding_length': '5120', 'llama.block_count': '40', 'llama.feed_forward_length': '13696', 'llama.attention.head_count': '40', 'tokenizer.ggml.eos_token_id': '151643', 'general.file_type': '12', 'llama.attention.head_count_kv': '40', 'llama.attention.layer_norm_rms_epsilon': '0.000010', 'llama.rope.freq_base': '10000.000000', 'tokenizer.ggml.model': 'gpt2', 'general.quantization_version': '2', 'tokenizer.ggml.bos_token_id': '151643', 'tokenizer.ggml.padding_token_id': '151643'}  
'content'  
 @  

,  
下面  
是一  
段  
根據  
您的  
要求  
編  
寫的   
的  
小說  
:  
  
  
王  
婆  
是  
清  
河  
城  
有名的  
媒  
人  
,  
她  
生  
得  
風  
流  
多  
情  
,  
經常  
出入  
於  
大戶  
人家  
和  
青  
樓  
妓  
院  
。  
這一天

內容不便全部貼出,理解萬歲。

結語

最後奉上基於llama-cpp-python和gradio的無審查大模型的webui專案,支援流式輸出,提高推理效率:

https://github.com/v3ucn/Causallm14b_llama_webui_adult_version

與眾鄉親同饗。

相關文章