Ollama本地部署自定义大模型

Ollama是一个专为本地机器设计的开源框架,旨在简化大型语言模型(LLM)的部署和运行过程。它提供了一套工具和命令,使用户能够轻松地下载、管理和运行各种语言模型,包括LLaMA、LLaVA等流行模型。Ollama通过优化设置和配置细节,如GPU使用情况,提高了模型运行的效率,并且其代码简洁明了,运行时占用资源少,使得在本地高效地运行大型语言模型成为可能。

Ollama支持Mac、Linux以及Windows(预览版)平台,并提供了Docker镜像,方便用户在不同操作系统环境下部署和使用。

本文将使用Ollama来实现llama-3.1大模型的本地化部署。

1. Ollama安装

这里的安装以Windows系统为例。

Ollama官方网站:https://ollama.com/

Ollama Windows版本下载地址:https://ollama.com/download/windows

Ollama在Windows下直接点击下载的安装包安装即可。

安装完成之后任务栏里会出现一个羊驼的图标,然而这玩意没什么图形界面,其使用需要用命令行来实现

2. 模型选择

本文主要关注本地部署大模型,因此将不再介绍用Ollama直接从Ollama官方库下载的方式,所有模型均为手动下载。

Ollama和llama.cpp一样(因为其底层就是用的llama.cpp),需要适配GGUF格式。

GGUF是一种由开发者Georgi Gerganov提出的大模型文件格式,全称为GPT-Generated Unified Format。该格式旨在优化大型机器学习模型的存储和加载效率,通过紧凑的二进制编码、优化的数据结构以及内存映射等技术,实现模型数据的高效存储、传输和快速加载。GGUF不仅支持多种模型格式,还具备跨硬件平台优化的特点,能够在CPU和GPU等不同设备上高效运行。

因此我们需要下载GGUF格式的模型文件,可以去Huggingface或ModelScope下载。这里以ModelScope为例,Huggingface也是类似,不方便访问Huggingface官网的可以用hf-mirror.com替代。

进入ModelScope后选择“模型库”,在搜索框中填入模型名+gguf,比如“llama3.1 gguf”,之后再选一个顺眼的点进去,比如说这个“Meta-Llama-3.1-8B-Instruct-GGUF”。

在ModelScope中搜索GGUF格式的模型进去之后点击“模型文件”即可看到GGUF格式的模型了。

ModelScope上的GGUF格式的模型文件示例可以看到,里面有好多个gguf文件,每一个代表一种配置的模型。以“Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf”为例:

  • Q 代表量化。
  • 4 表示量化过程中使用的位数。
  • K 表示在量化中使用 k 均值聚类。
  • M 表示量化后的模型大小。S = 小,M = 中,L = 大。

一般而言,量化位数越高则部署后模型输出的结果质量越高,但推理速度越慢,同时占用GPU显存/内存越多。

对于模型大小的额外说明:Ollama在加载模型时,如果GPU有空间,则会优先加载到GPU上,GPU不够了会加载到CPU(内存)中,因此建议加载时至少有足够大的内存。

3. Ollama使用

这里只介绍Ollama基本使用,详细文档可以参考官方文档:https://github.com/ollama/ollama/tree/main/docs

Ollama总体来讲有两种使用(推理)方式,一种是命令行运行,直接在命令行里输入问题,模型会在命令行中直接给出回答;另一种是调用接口,传入问题及参数,返回模型的输出答案。

### 实现 RAG 检索增强生成 为了在已部署Ollama 大模型中实施检索增强生成(Retrieval-Augmented Generation, RAG),需遵循一系列集成步骤,确保大模型能够有效地利用外部数据源来提升其响应质量。此过程不仅涉及配置Ollama本身,还包括设置向量数据库、定义嵌入(embedding)机制以及设计查询处理逻辑。 #### 配置环境与依赖项安装 首先,确认环境中已经成功部署了支持RAG特性的OLLAMA版本[^1]。接着,依据官方文档指导完成必要的Python包或其他工具链组件的安装工作,这些软件包通常涵盖了自然语言处理(NLP)库、向量操作接口以及其他辅助模块。 ```bash pip install llama-index ollama torch transformers faiss-cpu ``` #### 构建私有知识库并创建索引 构建一个结构化的私有知识库对于实现高效的RAG至关重要。这一步骤涉及到收集目标领域内的高质量文本资料,并将其转换成适合机器理解的形式——即通过预训练的语言模型生成对应的词向量表示(Embeddings)[^2]。随后,使用诸如FAISS这样的高效向量搜索引擎建立索引来加速后续的信息检索流程。 ```python from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS embeddings = HuggingFaceEmbeddings() vectorstore = FAISS.from_texts(texts=documents, embedding=embeddings) faiss_index_path = "path/to/faiss/index" vectorstore.save_local(faiss_index_path) ``` #### 整合Ollama API与自定义检索器 当拥有经过良好优化的知识库之后,则可以着手于将这个资源链接到实际运行中的OLLAMA实例上。具体来说就是编写一段中间件代码作为桥梁连接两者之间;每当接收到用户的输入请求时,这段代码负责调用预先设定好的算法去匹配最相关的几条记录返回给上游的服务端点作进一步加工处理之前。 ```python import requests def retrieve_relevant_documents(query): # 加载本地保存的Faiss索引文件 vectorstore = FAISS.load_local(faiss_index_path) query_embedding = embeddings.encode([query]) docs_scores = vectorstore.similarity_search_with_score( query=query_embedding, k=top_k_matches ) relevant_docs = [doc.page_content for doc, _ in docs_scores] return relevant_docs # 假设OLLAMA服务地址为http://localhost:8000/api/v1/generate/ ollama_api_url = 'http://localhost:8000/api/v1/generate/' response = requests.post( url=ollama_api_url, json={ "prompt": f"Given the context:\n{relevant_context}\nThe question is:{user_query}", "max_tokens": max_response_length } ).json() generated_answer = response['choices'][0]['text'] ``` 上述脚本展示了如何结合来自 Faiss 向量存储的结果和用户提供的问题形成最终提示(prompt), 并发送至OLLAMA服务器获取答案的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值