LangChain+llama.cpp+llama-cpp-python工程学习笔记(一)

LangChain 是一个开发由语言模型驱动的应用程序的框架,有以下特性。

  • 数据感知 : 将语言模型连接到其他数据源
  • 具有代理性质 : 允许语言模型与其环境交互

pip install langchain

报错ERROR: Could not find a version that satisfies the requirement langchain (from versions: none)ERROR: No matching distribution found for langchain

解决:pip install langchain -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

langchain集成llama:

pip install llama-cpp-python -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

报错:ERROR: Cannot unpack file C:\Users\96584\AppData\Local\Temp\pip-unpack-izfgtfwa\simple (downloaded from C:\Users\96584\AppData\Local\Temp\pip-req-build-1raavtqr, content-type: text/html; charset=utf-8); cannot detect archive format
ERROR: Cannot determine archive format of C:\Users\96584\AppData\Local\Temp\pip-req-build-1raavtqr

解决:换源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn  llama-cpp-python

报错:ERROR: Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based projects   不识别nmake

解决:在powershell中更改编译器 在cmd中输入powershell

$env:CMAKE_GENERATOR = "MinGW Makefiles"
$env:CMAKE_ARGS = "-DLLAMA_OPENBLAS=on

-DCMAKE_C_COMPILER=C:/w64devkit/bin/gcc.exe

-DCMAKE_CXX_COMPILER=C:/w64devkit/bin/g++.exe"

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn  llama-cpp-python

报错:

:thread.c:(.text+0x103f): multiple definition of `pthread_self' ../../libllama.dll.a(d000850.o):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status

解决:

在github上issue里有:添加:-DLLAVA_BUILD=OFF  取消LLAVA的支持

这是llama-cpp-python的bug

简单运行:

import llama_cpp

model = llama_cpp.Llama(
    model_path="D:/researchPJ/llamacpp/llama.cpp/models/llama-2-7b/ggml-model-q4_0.gguf",
)
print(model("The quick brown fox jumps ", stop=["."])["choices"][0]["text"])

报错:

RuntimeError: Failed to load shared library 'D:\code\langchain-llama\.venv\lib\site-packages\llama_cpp\libllama.dll': [WinError 193] %1 不是有效的 Win32 应用程序。

解决:

libllama.dll是32位的,需要重新编译为64位以适配windows

在cmake环境处添加-DCMAKE_GENERATOR_PLATFORM=x64以生成64位dll

报错:

MinGW Makefiles does not support platform specification, but platform x64 was specified.

解决:

创建文件如"mingw64.cmake"

其中内容:

set(CMAKE_GENERATOR_PLATFORM x64)

# Specify compilers

set(CMAKE_C_COMPILER C:/w64devkit/bin/gcc.exe)

set(CMAKE_CXX_COMPILER C:/w64devkit/bin/g++.exe)

更改编译环境:

 添加-DCMAKE_TOOLCHAIN_FILE=path/to/mingw64.cmake

重新编译:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn llama-cpp-python --upgrade  --force --reinstall  --no-cache-dir
之后运行成功

create_chat_completion()   return response['choices'][0]['message']['content']

langchain学习

from langchain_community.llms import LlamaCpp
llm = LlamaCpp(
    model_path="D:/researchPJ/llamacpp/llama.cpp/models/llama-2-7b/ggml-model-q4_0.gguf",
    temperature=0.75,
    n_gpu_layers=20,  # gpu accelerate
    n_threads=6,

)
prompt = """
what is langsmith?
"""
print(llm.invoke(prompt))

用模板来输入:

template = """Question: {question}

Answer: Let's work this out in a step by step way to be sure we have the right answer."""

prompt = PromptTemplate.from_template(template)

llm_chain = LLMChain(prompt=prompt, llm=llm)

question = "What NFL team won the Super Bowl in the year Justin Bieber was born?"
print(llm_chain.run(question))

提示+模型+输出解析:

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are world class technical documentation writer."),
    ("user", "{input}")
])

output_parser = StrOutputParser()

llm_chain = LLMChain(prompt=prompt, llm=llm, output_parser=output_parser)

print(llm_chain.invoke({"input": "how can langsmith help with testing?"}))

嵌入模型+向量存储+提示+模型+输出解析:

pip install beautifulsoup4

pip install faiss-cpu

from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.llms import LlamaCpp
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_community.document_loaders import WebBaseLoader
from langchain.embeddings import LlamaCppEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain



model_path = "D:/researchPJ/llamacpp/llama.cpp/models/llama-2-7b/ggml-model-q4_0.gguf"

embeddings = LlamaCppEmbeddings(model_path=model_path)

llm = LlamaCpp(
    model_path=model_path,
    temperature=0.75,
    n_gpu_layers=20,  # gpu accelerate
    n_threads=6,
    n_ctx=2048,

)

loader = WebBaseLoader("https://docs.smith.langchain.com")

docs = loader.load()

text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
vector = FAISS.from_documents(documents, embeddings)

prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:

<context>
{context}
</context>

Question: {input}""")

document_chain = create_stuff_documents_chain(llm, prompt)

retriever = vector.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, document_chain)

response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
print(response["answer"])

# LangSmith offers several features that can help with testing:...

加载要索引的数据。使用 WebBaseLoader

使用嵌入模型将文档摄取到向量存储

将创建一个检索链。 该链将接受一个传入的问题,查找相关文档,然后将这些文档与原始问题一起传递到 LLM 中,并要求它回答原始问题。

<think>好的,我现在需要回答用户关于在个人笔记本电脑上部署最新版deepseek模型的问题。首先,我得确认用户提到的deepseek模型具体是什么。可能是指深度求索公司开发的某个大语言模型,比如DeepSeek-R1或者他们的其他模型。然后,我需要考虑部署这样的模型需要哪些硬件和软件条件。 接下来,硬件方面,个人笔记本通常配置有限,尤其是显卡。最新的模型可能参数量很大,比如几十亿甚至上百亿参数,需要足够的显存。假设用户使用的是消费级显卡,比如NVIDIA的GTX或RTX系列,显存可能在8GB到16GB之间。我需要评估这样的配置是否足够运行模型,或者是否需要量化、剪枝等技术来降低资源消耗。 然后,软件方面,用户可能需要安装Python、PyTorch或TensorFlow等框架,以及相关的库如Hugging Face Transformers。还要考虑模型是否开源,是否有预训练的权重可供下载,或者是否需要从零开始训练,但后者在笔记本上几乎不可能。 存储空间也是个问题,大模型的权重文件可能占用几十GB的空间,用户的笔记本硬盘是否足够?此外,运行时的内存需求,RAM是否足够,可能需要16GB或更多。 另外,需要考虑模型的优化技术,比如使用Hugging Face的Accelerate库进行分布式训练或推理,或者使用ONNX Runtime、TensorRT来优化推理速度。还有,是否支持模型并行或数据并行,以便在资源有限的情况下运行。 用户作为本科生,可能对深度学习的部署流程不太熟悉,可能需要指导如何安装依赖、下载模型、编写推理代码。同时,要提醒注意版权问题,确保使用的模型是开源且允许个人使用的。 最后,给出个步骤指南,包括检查硬件、安装软件、下载模型、运行示例,以及可能的优化方法。还要提到可能的挑战,比如显存不足时的解决方法,或者推荐使用云服务作为备选方案。</think>部署最新版DeepSeek模型(如DeepSeek-R1等大语言模型)到个人笔记本电脑本地是可能的,但需根据模型规模、硬件配置和优化技术综合评估。以下是具体分析和步骤指南: --- ### **、硬件与模型匹配性** 1. **模型规模决定硬件需求** - **7B以下参数模型**(如DeepSeek-MoE-16B): 若使用量化技术(如4-bit/8-bit),可在 **16GB内存 + 8GB显存(如RTX 3060)** 的笔记本上运行,但推理速度较慢(1-3 token/s)。 - **70B以上参数模型**: 需至少 **64GB内存 + 24GB显存(如RTX 4090)**,普通笔记本难以承载,建议云端部署。 2. **显存不足的解决方案** - **CPU+内存推理**:使用`llama.cpp`、`ollama`等工具,将模型加载到内存而非显存(如用GGUF格式),但速度会显著下降(如7B模型在32GB内存下约0.5 token/s)。 - **模型量化**:通过`bitsandbytes`库将模型压缩至4-bit/8-bit,显存占用减少50%-75%。 - **模型切割**:使用`accelerate`库分片加载模型(需代码适配)。 --- ### **二、部署步骤(以7B模型为例)** 1. **环境准备** ```bash # 安装基础工具 conda create -n deepseek python=3.10 conda activate deepseek pip install torch transformers accelerate bitsandbytes ``` 2. **模型下载与量化** - 从Hugging Face下载官方量化版(如`deepseek-ai/deepseek-moe-16b-chat-4bit`): ```python from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained( "deepseek-ai/deepseek-moe-16b-chat", device_map="auto", # 自动分配CPU/GPU load_in_4bit=True, # 4-bit量化 trust_remote_code=True ) tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-moe-16b-chat") ``` 3. **推理代码示例** ```python prompt = "如何用Python实现快速排序?" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=200) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` --- ### **三、性能优化技巧** 1. **硬件级加速** - 启用CUDA核心:确保PyTorch安装GPU版本(`pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121`)。 - 使用Flash Attention 2:在`from_pretrained`中设置`use_flash_attention_2=True`(需安装`flash-attn`)。 2. **软件级优化** - **批处理加速**:合并多个请求(需调整`batch_size`)。 - **KV Cache缓存**:复用历史计算的Key-Value值(适用于多轮对话)。 --- ### **四、典型笔记本配置参考** | 配置项 | 最低要求 | 推荐要求 | |-----------------|------------------|------------------------| | CPU | Intel i5/Ryzen 5 | Intel i7/Ryzen 7 | | 内存 | 16GB | 32GB及以上 | | 显卡 | NVIDIA GTX 1650 | RTX 3060(12GB显存) | | 硬盘 | 50GB可用空间 | NVMe SSD 500GB | --- ### **五、注意事项** 1. **散热问题**:持续高负载可能触发笔记本过热降频,建议外接散热底座。 2. **存储限制**:70B模型仅权重文件约需140GB,需提前清理空间。 3. **替代方案**:若硬件不足,可考虑: - 使用**Colab Pro+**(约$50/月,提供A100 GPU) - 部署轻量版模型(如DeepSeek-1.3B) --- 通过合理选择模型规模和优化技术,本科生完全可以在个人笔记本上运行中小型DeepSeek模型,建议从1B-7B参数模型开始实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值