一、概述
Copilot在代码注释及辅助代码编写方面提供了极大的便利。我们需要向云服务器请求算力并发送信息,以获得响应。但是,在离线情况下要使用此类模型,就不是特别容易了。
英特尔在其Meteor Lake架构的芯片中加入了对Copilot的支持,这使得基于这些芯片的PC能够在没有互联网连接的情况下运行Copilot。Meteor Lake是英特尔采用新的Core Ultra命名方案的第一款芯片,采用了Intel 4的7纳米制程技术。Meteor Lake集成NPU/CPU/GPU硬件,可为本地大模型提供支持。
那么没有以上硬件的情况下,如何在本地运行和调用大模型呢?在没有特定的AI加速器的情况下,在本地运行大型预训练模型(如深度学习模型)通常会受到GPU/CPU性能的限制,但仍然是可行的。
在这里我们使用ollama和Llama3的衍生模型进行测试。系统及硬件为Windows11/i5-9300H/GTX1650(显存4G,共享显存8G)
二、主要程序介绍
1. Ollama
Ollama是一个开源框架,它的主要目标是简化大型语言模型(LLMs)在Docker容器中的部署过程。这让非专业用户也能够容易地管理和运行这些通常需要大量计算资源和专业知识才能操作的复杂模型。
以下是Ollama的一些关键特性:
- 轻量级与可扩展性:Ollama保持较低的资源占用,同时支持模型的扩展和优化。
- 简化部署:用户可以通过简单的安装指令在本地运行开源大型语言模型,例如GEMMA或其他类似的模型。
- 跨平台支持:Ollama可以在多种操作系统上运行,包括Windows,这使得它对广泛的用户群体具有吸引力。
- 模型管理:Ollama提供了一个平台来管理多个语言模型,并且可以方便地切换和运行不同的模型。
- 服务化:它可以作为服务运行,允许通过网络接口访问和交互,便于集成到其他应用程序或服务中。
Ollama的目标是让大型语言模型更加普及和易于使用,而不需要深入的技术背景。
2. VSCode + Aide拓展
作为通用且免费的代码编辑器,使用VSCode的Aide拓展以调用Ollama的相关API,并提供图形化界面。Aide拓展支持多种模型,并提供以下几个主要功能:
- 为代码添加完整注释(Note)
- 将一种代码语言的功能用另一种语言实现(Convert)
- 变量重命名(Rename)
3. Llama大模型
Ollama支持下载并运行其提供的模型,Ollama还支持外部其他模型的导入。这里我们使用从Hugging Face上找到的Llama3-8B-Chinese-Chat-q8_0-v2_1.gguf
模型,该模型经过微调,中文生成效果更好。q8表示量化为8位,相比于q4和q6精度更高。
GGUF(GPT-Generated Unified Format)是一种专为大规模机器学习模型设计的二进制文件格式。它由EleutherAI提出,旨在优化模型的存储和加载效率,尤其是对于那些在GPU或CPU上运行的大型语言模型,如GPT(Generative Pre-trained Transformer)系列模型。
GGUF格式的主要特点包括:
紧凑的二进制编码:相比于传统的Hugging Face或PyTorch的.bin文件,GGUF使用了更紧凑的二进制编码,这有助于减小文件大小并提高加载速度。
优化的数据结构:GGUF利用了优化的数据结构,可以更有效地存储和访问模型的权重和参数。
内存映射(mmap)技术:GGUF支持内存映射,这意味着模型的部分数据可以直接从磁盘映射到内存,无需先读取到缓存再映射,这可以进一步提升模型的加载和运行效率。
量化选项:GGUF支持不同级别的量化,允许用户根据性能和精度需求选择合适的浮点数位数,从而在模型大小、运行速度和预测准确性之间做出权衡。
GGUF格式的文件通常比未优化的模型文件小,加载速度更快,而且由于内存映射的使用,它们在运行时也能更有效地利用内存资源。这使得GGUF成为在有限资源的设备上部署大型语言模型的一个理想选择。例如,通过使用如llama.cpp或Ollama这样的工具,用户可以在个人电脑上运行原本需要高性能服务器才能运行的模型。
三、配置过程
按照环境配置的基本思路,我们分为以下几个步骤。
1. 下载安装Ollama
Ollama |
环境要求Windows10+,下载.exe文件并默认安装在C盘。Ollama是命令行工具,因此需要将其.exe所在路径添加到系统路径的环境变量中,以便在PowerShell调用。
1 | 目录: C:\Users\用户名\AppData\Local\Programs\Ollama |
2. 测试Ollama
Windows PowerShell(或cmd)中键入ollama -v
,如果显示如下类似文字即成功。
1 | C:\Windows\System32>ollama -v |
3. 下载模型文件
从Hugging Face上找到适合的GGUF格式模型文件,下载到本地。不需要特意下载到与Ollama相同的根目录下。这里我们创建一个文件夹用来存放模型及其配置文件。
1 | F:\Llama3 |
4. 模型配置与导入
这部分可以参考廖雪峰的教程:本地快速安装运行史上最强开源LLaMa3大模型
创建一个模型配置文件config.txt
,其实其名字并不重要,内容如下:
1 | FROM "F:\Llama3\Llama3-8B-Chinese-Chat-q8_0-v2_1.gguf" |
其中模型配置文件中FROM后的参数为模型文件的绝对路径。模型配置文件其他代码来源于网络,尚未仔细研究其功能。
1 | F:\Llama3 |
使用以下命令导入模型,其中llama3-cn
为名称,可修改为其他名称。
1 | ollama create llama3-cn -f ./config.txt |
导入需要2~5分钟时间。导入后使用ollama list
可查看模型是否成功导入。
1 | PS F:\Llama3> ollama list |
既然有list
命令,意味着我们可以导入多个模型方便从ollama
调用。
5. 测试命令行运行
导入成功后可以输入命令ollama run llama3-cn
测试运行。需要等待模型加载完成。
1 | PS F:\Llama3> ollama run llama3-cn |
6. VSCode配置
确保已经下载了aide拓展。然后可以在settings.json
文件中添加如下配置:
1 | { |
这里就配置好本地模型的访问端口了。之后aide拓展即可调用本地模型,完成对应的功能。
7. VSCode测试
配置完,可以右键
1 | #include <stdio.h> |
选择代码段,执行Code Viewer Helper
,运行结果如下:
Include standard input/output functions
1 |
|
执行Code Convert
,转换语言为python,运行结果如下:
To assist you, I will provide Python code that is functionally equivalent to the C code. Please note that this translation does not include third-party API or dependency names, as specified.
Here is the translated code:
1 | # Python 3.x |
Confidence: 95% |
||
Please note that this translation does not include third-party API or dependency names, as specified.
Here is the translated code:
1 | # Python 3.x |
Confidence: 95% |
并不是特别完美,可能还需要对提示词进行调整。不过难得的是在本地资源及其有限的情况下,还能保持一定的可用性。
四、常见问题
1 | Error: llama runner process has terminated: exit status 0xc0000409 error loading model: unable to allocate backend buffer |
如果你遇到这种问题,说明内存不足8GB(取决于你实际使用的设备和模型),无法加载模型。请使用任务管理器查看相应硬件性能(包括内存、GPU内存/GPU共享内存等)