本地部署Qwen2大模型之一:Ollama方式部署

缘起

字节跳动在2024年12 月 18 日举办了火山引擎 FORCE 原动力大会,会上发布了豆包视觉理解模型和豆包 3D 生成模型,引起了AI业界的一片骚动,吸引了无数AI创业者和终端用户的眼光,我也开始关注起了豆包。一年前百度发布文心一言的时候,我第一时间试用了下,当时的感受是,AI还很不成熟,干不了真活;半年前Kimi横空出世,试用之后觉得很欣喜,直接用它替代了桌面搜索;这两天试用豆包,顿时由衷地感到兴奋,太聪明了,对话太流畅了,真的可以当作身边的机器猫——万能助手。于是,我就开始想深入接触下AI,这篇文章就是我第一次在本地部署AI大模型的过程记录。

为什么要本地部署,又为什么选Qwen?

简单说这是个自然的了解过程,不是一开始就设定的目标。
我手机上已经安装了五六个AI应用,包括百度的文小言(之前叫文心一言),阿里的通义(之前叫通义千问),讯飞科技的讯飞星火、讯飞晓医,清华的智谱清言,月之暗面的Kimi等,刚刚又安装了豆包。这些都是AI大厂基于各自的大语言模型(Large Language Model)推出的面向普通用户的应用,普通用户当然觉得很好玩,很有用,但是也只能是从普通使用者的角度来用,我作为一个程序员,作为潜在的AI创业者,在面对AI时代大潮的时候能够做些什么呢?怎么才能利用好这千载难逢的技术革命机遇呢?不管能不能做些什么,至少心潮是澎湃的。我要从一个专业用户的角度深入了解AI,利用AI,于是,就开启了接入AI的历程。
首先,我通过Kimi和豆包询问了如何接入AI大模型,访问了火山引擎的官网,注册了账号,学习了基础文档,了解了相关SDK和接入方法。
火山引擎的官网链接:https://www.volcengine.com/
火山引擎的接入方法文档:https://www.volcengine.com/docs/82379/1399008
从这里,我知道要接入豆包大模型,必须在火山引擎(类似于阿里云,是字节跳动向用户提供一系列互联网服务的平台,包括云服务器租售、AI大模型接入等)上开通服务。虽然平台对于新开通的用户有较大的免费额度,但要真正开发和发布程序,要用起来,哪怕是在测试阶段,也是要投入一定花销的,包括租服务器,调用大模型接口等,都有成本。
进一步了解了下各厂家大模型的收费标准,做了下横向比较,结论是豆包大模型最便宜(不代表严格的市场调研,只是在我了解的范围之内有这个认识),也基本锁定了它。
各大模型接口调用费用对比
但还是要花钱啊,在真正跑起业务之前,能不能不花钱或者少花钱,先练练手?!于是开始考虑能不能自己部署个大模型,一搜,还真有!下面这篇文章帮了很大的忙,我基本就是参照这个来做的。
手把手教你多种方式体验Qwen2最强开源大模型
开始我根本不知道Qwen2是什么,打开它的链接才知道,这就是阿里通义千问大模型的前期版本啊,而且它是开源的,突然好感激阿里!
在真正动手之前,我也做了下基本的调查,能不能在本地部署?需要怎样的硬件?我有没有这个基础? 结论是:Qwen2:7b还是有得搞的。
本地部署Qwen2 72B大模型需要的资源
本地部署Qwen2 7B需要的资源
就准备开始动手整吧,仔细阅读了上面的参考文章,其中涉及到两种部署方式:Ollama方式和vLLM方式。我开始根本不知道这两个是啥,还以为是一个过程的两个步骤,借助豆包和Kimi,分别了解了下,原来是两种本地部署AI大模型的框架(或者说平台)。多的我也解释不来,直接打开参考文章中的链接了解吧。简单说,Ollama是一键搞定,vLLM需要自己搭建环境,还要写点代码。
Ollama和vLLM的简单比较
下面就开始具体动手了。我已有一台笔记本电脑,安装了Ubuntu 2022.04,正好够用,直接按参考文章中的步骤开始搞,但是,眼高手低是自然的事,实际过程并不顺利!

Ollama方式部署

先用Ollama方式部署。其实跟Ollama平台类似的还有一个LM Studio,LM Studio被认为是一个比Ollama更好用的本地大语言模型(LLM)应用平台。LM Studio提供了更广泛的功能集,包括发现、下载和运行本地LLM,以及应用内聊天界面以及与OpenAI兼容的本地服务器接口。它还提供了来自Hugging Face等更广泛的模型选择,并且用户界面被认为比Ollama更加友好。但是,它是收费的,虽然对个人用户暂时还是免费,但毕竟有限制啊,Ollama可是开源的哦!
顺便了解下Hugging Face是个啥东西? 原来它提供各种AI大模型,大部分的都可以免费使用,好!到官网瞄了一眼,确实有好多大模型,先收藏链接,后面再去具体研究。
第一步,安装Ollama,按参考文章打开链接看了下,支持Windows/Mac/Linux等多平台,Windows平台可以直接下载exe文件来安装,Linux平台运行一行shell指令就可以,干!
理想很丰满,但现实很骨感,反复运行多次,发现不是链接不上,就是github需要用户验证,再就是下载非常的慢(估计是得要一两天的时间),反正就是下载不动。
于是我找了很多方法。首先观察Linux平台的安装步骤,就一句指令:

curl -fsSL https://ollama.com/install.sh | sh

这是两个动作,先下载一个安装脚本,然后在本地运行。我就把这个安装脚本先下载下来看看里面到底是些啥,于是我改变指令:

curl https://ollama.com/install.sh -o install_ollama.sh

然后打开install_ollama.sh文件,很清楚,重点就是两行指令:

status "Downloading Linux ${ARCH} bundle"                                                                          
curl --fail --show-error --location --progress-bar \                                                               
    "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" | \                                         
    $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR" 

其中 A R C H 自动分析出来的本地机器的架构,对应到我的电脑就是 a m d 64 , {ARCH}自动分析出来的本地机器的架构,对应到我的电脑就是amd64, ARCH自动分析出来的本地机器的架构,对应到我的电脑就是amd64{VER_PARAM}没有指定, S U D O 对于 U b u n t u 就是 s u d o 指令, SUDO对于Ubuntu就是sudo指令, SUDO对于Ubuntu就是sudo指令,{OLLAMA_INSTALL_DIR}是自动分析出来的安装目标路径,对应到我的系统就是/usr/local/bin,是不是很简单?实际就是下载文件,解压!
你自动下载不动,我就手动下载、手动解压总行了吧?于是我直接运行命令:

curl -v https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz

结果还是失败,但是可以发现输出的信息中有一条:

< location: https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64.tgz  

呵呵,露出原形了,文件的真正地址在https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64.tgz,继续下载这个地址,还是失败,但这次地址又变为https://github.com/ollama/ollama/releases/download/v0.5.4/ollama-linux-amd64.tgz,说明现在的latest版本是v0.5.4。继续用新地址下载,还是失败,github不允许访问,也偶尔连接成功但下载文件速度极慢,过一段时间还是以失败告终,这是我们经常遇到的情况了。
以前也遇到过类似的问题,在网上搜索了解决办法,就是把github.com的地址查出来写进/etc/hosts文件中去(在shell中运行nslookup工具解析域名,找到IP地址;如果还没有nslookup工具,就先用apt安装bind-utils或bind9-utils)。我都加了下面这些地址
在这里插入图片描述
结果还是慢,极慢!网上有说采用加速器,在目标链接地址的前面加上https://github.moeyy.xyz/,试了,不起作用。

下载不下来怎么办? 放终极大招,在Windows上用下载加速工具——迅雷下载,充了值,开通超级会员通道(抬抬手,原谅我吧~)

在Windows平台的浏览器中打开https://github.com/ollama页面(Windows上也经常打不开,但是也有能打开的时候),可以看到这个仓库有三个项目,第一个就是ollama,点进去,看到的是项目源码:
在这里插入图片描述
注意到页面的右侧有个Releases标签,其中v0.5.4映射为latest,这就是项目发布文件的位置,点开它,可以看到目录下的所有发布文件:
在这里插入图片描述
这就是庐山的真面目了。其中要下载的大文件1.57GB,还有个文件1.13GB(后面具体说),用迅雷加速下载大概十来分钟到半个小时搞定。
第一个目标文件下载下来后,将其转到Ubuntu下的工作目录,然后根据安装脚本中的指令,执行:

sudo tar -xzf ollama-linux-amd64.tgz -C /usr/local/bin

解压完成后,在/usr/local/bin多出现一个可执行文件ollama,至此,终于完成第一步。
继续仔细阅读install_ollama.sh脚本,发现后续的一个主要工作是判断显卡是否支持GPU,且分为Nvidia系列GPU和AMD系列GPU,判定方法是执行lshw和lspci指令,然后查看输出中有没有特征字样,我的电脑输出如下:

$ lshw -c display -numeric                                                                                         
WARNING: you should run this program as super-user.                                                                
  *-display                                                                                                        
       description: VGA compatible controller                                                                      
       product: CometLake-U GT2 [UHD Graphics] [8086:9B41]                                                         
       vendor: Intel Corporation [8086]                                                                            
       physical id: 2                                                                                              
       bus info: pci@0000:00:02.0                                                                                  
       logical name: /dev/fb0                                                                                      
       version: 02                                                                                                 
       width: 64 bits                                                                                              
       clock: 33MHz                                                                                                
       capabilities: vga_controller bus_master cap_list rom fb                                                     
       configuration: depth=32 driver=i915 latency=0 resolution=1920,1080                                          
       resources: irq:149 memory:d0000000-d0ffffff memory:c0000000-cfffffff ioport:5000(size=64) memory:c0000-dffff
  *-display                                                                                                        
       description: Display controller                                                                             
       product: Lexa [Radeon 540X/550X/630 / RX 640 / E9171 MCM] [1002:6987]                                       
       vendor: Advanced Micro Devices, Inc. [AMD/ATI] [1002]                                                       
       physical id: 0                                                                                              
       bus info: pci@0000:03:00.0                                                                                  
       version: c0                                                                                                 
       width: 64 bits                                                                                              
       clock: 33MHz                                                                                                
       capabilities: bus_master cap_list rom                                                                       
       configuration: driver=amdgpu latency=0                                                                      
       resources: irq:150 memory:a0000000-afffffff memory:b0000000-b01fffff ioport:4000(size=256) memory:d1400000-d143ffff memory:d1440000-d145ffff                                                                                   
WARNING: output may be incomplete or inaccurate, you should run this program as super-user. 

根据其中的关键字"vendor:…[1002]"以及"driver=amdgpu"可以推定,我的电脑是匹配AMD GPU的,因此还需进一步安装GPU加速的驱动库,对应的文件是https://github.com/ollama/ollama/releases/download/v0.5.4/ollama-linux-amd64-rocm.tgz,下载方法跟上面的ollama-linux-amd64.tgz文件一样。下载完成后,同样执行解压命令:

tar -xzf ollama-linux-amd64-rocm.tgz -C /usr/local/bin

其结果是在/usr/local/bin/lib/ollama目录下安装了一系列的库文件:

$ ll /usr/local/bin/lib/                                                                                           
总计 12                                                                                                            
drwxr-xr-x 3 root root 4096 1217 18:17 ./                                                                       
drwxr-xr-x 4 root root 4096 1217 18:17 ../                                                                      
drwxr-xr-x 4 root root 4096 1217 18:17 ollama/                                                                  
                                                                                                                                                                                         
$ ll /usr/local/bin/lib/ollama/                                                                                    
总计 4653440                                                                                                       
drwxr-xr-x 4 root root       4096 1217 18:17 ./                                                                 
drwxr-xr-x 3 root root       4096 1217 18:17 ../                                                                
lrwxrwxrwx 1 root root         25 1217 18:17 libamd_comgr.so.2 -> libamd_comgr.so.2.7.60102*                    
-rwxr-xr-x 1 root root  149865832 1217 18:17 libamd_comgr.so.2.7.60102*                                         
lrwxrwxrwx 1 root root         24 1217 18:17 libamdhip64.so.6 -> libamdhip64.so.6.1.60102*                      
-rwxr-xr-x 1 root root   27904952 1217 18:17 libamdhip64.so.6.1.60102*                                          
lrwxrwxrwx 1 root root         25 1217 18:17 libcublasLt.so.11 -> libcublasLt.so.11.5.1.109*                    
-rwxr-xr-x 1 root root  263770264 1217 18:17 libcublasLt.so.11.5.1.109*                                         
lrwxrwxrwx 1 root root         25 1217 18:17 libcublasLt.so.12 -> ./libcublasLt.so.12.4.5.8*                    
-rwxr-xr-x 1 root root  441938896 1217 18:17 libcublasLt.so.12.4.5.8*                                           
lrwxrwxrwx 1 root root         23 1217 18:17 libcublas.so.11 -> libcublas.so.11.5.1.109*                        
-rwxr-xr-x 1 root root  121866104 1217 18:17 libcublas.so.11.5.1.109*                                           
lrwxrwxrwx 1 root root         23 1217 18:17 libcublas.so.12 -> ./libcublas.so.12.4.5.8*                        
-rwxr-xr-x 1 root root  109604768 1217 18:17 libcublas.so.12.4.5.8*                                             
lrwxrwxrwx 1 root root         21 1217 18:17 libcudart.so.11.0 -> libcudart.so.11.3.109*                        
-rwxr-xr-x 1 root root     619192 1217 18:17 libcudart.so.11.3.109*                                             
lrwxrwxrwx 1 root root         21 1217 18:17 libcudart.so.12 -> libcudart.so.12.4.127*                          
-rwxr-xr-x 1 root root     707904 1217 18:17 libcudart.so.12.4.127*                                             
lrwxrwxrwx 1 root root         22 1217 18:17 libdrm_amdgpu.so.1 -> libdrm_amdgpu.so.1.0.0*                      
-rwxr-xr-x 1 root root      57568 1217 18:17 libdrm_amdgpu.so.1.0.0*                                            
lrwxrwxrwx 1 root root         15 1217 18:17 libdrm.so.2 -> libdrm.so.2.4.0*                                    
-rwxr-xr-x 1 root root     102328 1217 18:17 libdrm.so.2.4.0*                                                   
-rwxr-xr-x 1 root root      99944 1217 18:17 libelf-0.176.so*                                                   
lrwxrwxrwx 1 root root         15 1217 18:17 libelf.so.1 -> libelf-0.176.so*                                    
lrwxrwxrwx 1 root root         25 1217 18:17 libhipblaslt.so.0 -> libhipblaslt.so.0.7.60102*                    
-rwxr-xr-x 1 root root    9946264 1217 18:17 libhipblaslt.so.0.7.60102*                                         
lrwxrwxrwx 1 root root         23 1217 18:17 libhipblas.so.2 -> libhipblas.so.2.1.60102*                        
-rwxr-xr-x 1 root root    1073688 1217 18:17 libhipblas.so.2.1.60102*                                           
lrwxrwxrwx 1 root root         30 1217 18:17 libhsa-runtime64.so.1 -> libhsa-runtime64.so.1.13.60102*           
-rwxr-xr-x 1 root root    3089448 1217 18:17 libhsa-runtime64.so.1.13.60102*                                    
lrwxrwxrwx 1 root root         16 1217 18:17 libnuma.so.1 -> libnuma.so.1.0.0*                                  
-rwxr-xr-x 1 root root      50704 1217 18:17 libnuma.so.1.0.0*                                                  
lrwxrwxrwx 1 root root         23 1217 18:17 librocblas.so.4 -> librocblas.so.4.1.60102*                        
-rwxr-xr-x 1 root root  881735968 1217 18:17 librocblas.so.4.1.60102*                                           
lrwxrwxrwx 1 root root         32 1217 18:17 librocprofiler-register.so.0 -> librocprofiler-register.so.0.3.0*  
-rwxr-xr-x 1 root root    1049792 1217 18:17 librocprofiler-register.so.0.3.0*                                  
lrwxrwxrwx 1 root root         25 1217 18:17 librocsolver.so.0 -> librocsolver.so.0.1.60102*                    
-rwxr-xr-x 1 root root 1384333400 1217 18:17 librocsolver.so.0.1.60102*                                         
lrwxrwxrwx 1 root root         25 1217 18:17 librocsparse.so.1 -> librocsparse.so.1.0.60102*                    
-rwxr-xr-x 1 root root 1367043336 1217 18:17 librocsparse.so.1.0.60102*                                         
lrwxrwxrwx 1 root root         15 1217 18:17 libtinfo.so.5 -> libtinfo.so.5.9*                                  
-rwxr-xr-x 1 root root     174576 1217 18:17 libtinfo.so.5.9*                                                   
drwxr-xr-x 3 root root       4096 1217 18:17 rocblas/                                                           
drwxr-xr-x 7 root root       4096 1217 18:36 runners/ 

最后,按照安装脚本中的指令,还需设置好ollama服务,以如下的内容创建/etc/systemd/system/ollama.service文件(注意,安装脚本中单独创建了ollama用户并为其分配了相应的执行权限,我这里简化了,直接用了我本人现成的账号)。

$ cat /etc/systemd/system/ollama.service                                                                           
[Unit]                                                                                                             
Description=Ollama Service                                                                                         
After=network-online.target                                                                                        
                                                                                                                   
[Service]                                                                                                          
ExecStart=/usr/local/bin/ollama serve                                                                              
User=zhangsan                                                                                                         
Group=zhangsan                                                                                                       
Restart=always                                                                                                     
RestartSec=3                                                                                                       
Environment="PATH=$PATH"                                                                                           
                                                                                                                   
[Install]                                                                                                          
WantedBy=default.target  

至此,Ollama安装就完成了。这两步完成之后,大概总共占用了10GB左右的空间。
最后我们把服务启动起来,执行如下指令:

sudo systemctl daemon-reload
sudo systemctl start ollama

如果要让Ollama开机自动运行,可以执行sudo systemctl enable ollama指令,安装脚本中就这样执行的(我并没有执行这个指令)。可以进一步看看Ollama服务的状态:

$ sudo systemctl status ollama                                                                                     
● ollama.service - Ollama Service                                                                                  
     Loaded: loaded (/etc/systemd/system/ollama.service; disabled; vendor preset: enabled)                         
     Active: active (running) since Sat 2024-12-21 03:14:07 UTC; 36s ago                                           
   Main PID: 7270 (ollama)                                                                                         
      Tasks: 12 (limit: 18739)                                                                                     
     Memory: 12.4M                                                                                                 
        CPU: 30ms                                                                                                  
     CGroup: /system.slice/ollama.service                                                                          
             └─7270 /usr/local/bin/ollama serve                                                                    
                                                                                                                   
1221 03:14:07 allen-tp2 ollama[7270]: [GIN-debug] HEAD   /                         --> github.com/ollama/ollama>
1221 03:14:07 allen-tp2 ollama[7270]: [GIN-debug] HEAD   /api/tags                 --> github.com/ollama/ollama>
1221 03:14:07 allen-tp2 ollama[7270]: [GIN-debug] HEAD   /api/version              --> github.com/ollama/ollama>
1221 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.544Z level=INFO source=routes.go:1310 msg="Liste>
12月 21 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.545Z level=INFO source=routes.go:1339 msg="Dynam>
1221 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.545Z level=INFO source=gpu.go:226 msg="looking f>
12月 21 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.558Z level=WARN source=amd_linux.go:61 msg="olla>
1221 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.558Z level=INFO source=amd_linux.go:404 msg="no >
12月 21 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.558Z level=INFO source=gpu.go:392 msg="no compat>
1221 03:14:07 allen-tp2 ollama[7270]: time=2024-12-21T03:14:07.558Z level=INFO source=types.go:131 msg="inferen>
                                                                                                                                                                                                    
$ ollama help run                                                                                                  
Run a model                                                                                                        
                                                                                                                   
Usage:                                                                                                             
  ollama run MODEL [PROMPT] [flags]                                                                                
                                                                                                                   
Flags:                                                                                                             
      --format string      Response format (e.g. json)                                                             
  -h, --help               help for run                                                                            
      --insecure           Use an insecure registry                                                                
      --keepalive string   Duration to keep a model loaded (e.g. 5m)                                               
      --nowordwrap         Don't wrap words to the next line automatically                                         
      --verbose            Show timings for response                                                               
                                                                                                                   
Environment Variables:                                                                                             
      OLLAMA_HOST                IP Address for the ollama server (default 127.0.0.1:11434)                        
      OLLAMA_NOHISTORY           Do not preserve readline history  

哈哈,一切OK!

运行Qwen2:7b大模型

快要见到太阳了,最后要做的就是运行Qwen2大模型。之所以说Ollama是一键搞定大模型,是因为它确实简单,只要一个指令就行:

$ ollama run qwen2:7b 

运行该指令后,Ollama就开始拉取大模型的文件,因为它是一个平台,在平台上已经集成了Qwen2大模型,而且还有各种规格的大模型,还有其他厂家的大模型,想要哪个,一个指令就行,真的太省心了!
等待一段时间之后,大模型下载和配置成功,输出信息如下:

$ ollama run qwen2:7b                                                                                              
pulling manifest                                                                                                   
pulling 43f7a214e532... 100% ▕███████████████████████████████████████████████████▏ 4.4 GB                          
pulling 77c91b422cc9... 100% ▕███████████████████████████████████████████████████▏ 1.4 KB                          
pulling c156170b718e... 100% ▕███████████████████████████████████████████████████▏  11 KB                          
pulling f02dd72bb242... 100% ▕███████████████████████████████████████████████████▏   59 B                          
pulling 75357d685f23... 100% ▕███████████████████████████████████████████████████▏   28 B                          
pulling 648f809ced2b... 100% ▕███████████████████████████████████████████████████▏  485 B                          
verifying sha256 digest                                                                                            
writing manifest                                                                                                   
success  

然后,然后,然后,令人激动的对话提示出现了!你可以随便输入你想要问的问题,模型会进行回答,就跟手机app上一样的玩法:

>>> 你好啊,终于见到你了                                                                                           
你好!很高兴能为您服务。如果您有任何问题或需要帮助,请随时告诉我。我将尽力提供支持和解答您的疑问。无论是关于技     
术、知识、日常生活还是其他任何话题,我都乐于助您一臂之力。请尽管提问吧!                                           
                                                                                                                   
>>> 刚下载下来的大模型文件保存在哪里?                                                                              
大模型文件通常比较大,所以一般我们会选择一个高速且稳定的地方来存储它们,以便快速访问并进行后续操作。不同的系统     
或软件可能在特定位置保存这些文件,但常见的存放路径通常是:                                                         
                                                                                                                   
1. **操作系统默认的下载目录**:在Windows系统中,这可能是`C:\Users\[用户名]\Downloads`;在macOS和Linux系统中,则    
通常在用户的主目录下有一个名为`Downloads`的子目录。                                                                
                                                                                                                   
2. **专门的应用程序或软件内设置的保存路径**:如果你使用的是特定的深度学习框架(如TensorFlow、PyTorch)或者预训     
练模型下载工具,它们通常会允许你自定义模型文件的存放位置。比如在某些情况下,你可以通过修改环境变量、脚本配置或     
者是应用内的设置来指定保存路径。                                                                                   
                                                                                                                   
3. **云存储服务**:如果你需要处理非常大的文件,并且希望有空间限制之外的额外备份或者共享能力,那么使用Google        
Drive、Dropbox或AWS S3这样的云存储服务是理想的选择。你可以下载模型文件到云端,然后根据需要在不同的设备间同步或     
分享。                                                                                                             
                                                                                                                   
4. **特定的项目目录**:如果你正在处理一个具体的研究或开发项目,并且有一个专门的工作空间来组织你的文件和数据集,    
那么你可能会将大模型文件保存在这个项目的某个子目录下。这种做法有助于保持良好的文件结构管理。                       
                                                                                                                   
请根据你的具体情况选择合适的方法来存储大模型文件。如果是首次操作,建议先检查操作系统默认的下载路径;如果后续需     
要针对特定场景进行定制,可以考虑使用专门的应用程序设置或云存储服务。                                               
                                                                                                                   
>>> Send a message (/? for help)  

你是不是有很多问题想问? 我的第一个问题是,刚才下载了Qwen2:7b大模型,看起来它有4.4GB,还好,不算太大,但是,它到底放到哪里去了呢,长的什么样?
大模型的回答只能说一般般,原谅它吧,那个时候它还没开始心跳呢~
从前面的安装过程中,我知道有个/usr/local/bin/lib/ollama目录,到这个目录下看看,没有;通过分析磁盘的空间消耗情况,发现我的用户目录下多用了4个多GB的空间,大概知道它在哪里了。查看用户目录,果然多出了一个隐藏的.ollama子目录,进一步挖掘,面纱揭开:

$ ll .ollama/                                                                                                      
总计 24                                                                                                            
drwxr-xr-x  3 allen allen 4096 1221 03:53 ./                                                                    
drwxr-x--- 21 allen allen 4096 1221 03:14 ../                                                                   
-rw-------  1 allen allen   81 1221 03:53 history                                                               
-rw-------  1 allen allen  387 1221 03:14 id_ed25519                                                            
-rw-r--r--  1 allen allen   81 1221 03:14 id_ed25519.pub                                                        
drwxr-xr-x  4 allen allen 4096 1221 03:17 models/                                                               
                                                                                                                                                                                                               
$ ll .ollama/models/                                                                                               
总计 16                                                                                                            
drwxr-xr-x 4 allen allen 4096 1221 03:17 ./                                                                     
drwxr-xr-x 3 allen allen 4096 1221 03:53 ../                                                                    
drwxr-xr-x 2 allen allen 4096 1221 03:51 blobs/                                                                 
drwxr-xr-x 3 allen allen 4096 1221 03:51 manifests/                                                             
                                                                                                                                                                                                                  
$ ll .ollama/models/blobs/                                                                                         
总计 4327568                                                                                                       
drwxr-xr-x 2 allen allen       4096 1221 03:51 ./                                                               
drwxr-xr-x 4 allen allen       4096 1221 03:17 ../                                                              
-rw-r--r-- 1 allen allen 4431388192 1221 03:51 sha256-43f7a214e5329f672bb05404cfba1913cbb70fdaa1a17497224e1925046b0ed5                                                                                                             
-rw-r--r-- 1 allen allen        485 1221 03:51 sha256-648f809ced2bdb9f26780f2f1cd9b4787804a4796b256ac5c7da05f4fa1729e6                                                                                                             
-rw-r--r-- 1 allen allen         28 1221 03:51 sha256-75357d685f238b6afd7738be9786fdafde641eb6ca9a3be7471939715a68a4de                                                                                                             
-rw-r--r-- 1 allen allen       1383 1221 03:51 sha256-77c91b422cc9fce701d401b0ecd74a2d242dafd84983aa13f0766e9e71936db2                                                                                                             
-rw-r--r-- 1 allen allen      11344 1221 03:51 sha256-c156170b718ec29139d3653d40ed1986fd92fb7e0959b5c71f3c48f62e6636f4                                                                                                             
-rw-r--r-- 1 allen allen         59 1221 03:51 sha256-f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216                                                                                                             
                                                                                                                                                                                                                  
$ ll .ollama/models/manifests/                                                                                     
总计 12                                                                                                            
drwxr-xr-x 3 allen allen 4096 1221 03:51 ./                                                                     
drwxr-xr-x 4 allen allen 4096 1221 03:17 ../                                                                    
drwxr-xr-x 3 allen allen 4096 1221 03:51 registry.ollama.ai/                                                    
                                                                                                                                                                                                                   
$ ll .ollama/models/manifests/registry.ollama.ai/                                                                  
总计 12                                                                                                            
drwxr-xr-x 3 allen allen 4096 1221 03:51 ./                                                                     
drwxr-xr-x 3 allen allen 4096 1221 03:51 ../                                                                    
drwxr-xr-x 3 allen allen 4096 1221 03:51 library/                                                               
                                                                                                                                                                                                                 
$ ll .ollama/models/manifests/registry.ollama.ai/library/                                                          
总计 12                                                                                                            
drwxr-xr-x 3 allen allen 4096 1221 03:51 ./                                                                     
drwxr-xr-x 3 allen allen 4096 1221 03:51 ../                                                                    
drwxr-xr-x 2 allen allen 4096 1221 03:51 qwen2/                                                                 
                                                                                                                                                                                                                   
$ ll .ollama/models/manifests/registry.ollama.ai/library/qwen2/                                                    
总计 12                                                                                                            
drwxr-xr-x 2 allen allen 4096 1221 03:51 ./                                                                     
drwxr-xr-x 3 allen allen 4096 1221 03:51 ../                                                                    
-rw-r--r-- 1 allen allen 1003 1221 03:51 7b                                                                     
                                                                                                                                                                                                                    
$ cat .ollama/models/manifests/registry.ollama.ai/library/qwen2/7b                                                 
{"schemaVersion":2,"mediaType":"application/vnd.docker.distribution.manifest.v2+json","config":{"mediaType":"application/vnd.docker.container.image.v1+json","digest":"sha256:648f809ced2bdb9f26780f2f1cd9b4787804a4796b256ac5c7da05f4fa1729e6","size":485},"layers":[{"mediaType":"application/vnd.ollama.image.model","digest":"sha256:43f7a214e5329f672bb05404cfba1913cbb70fdaa1a17497224e1925046b0ed5","size":4431388192},{"mediaType":"application/vnd.ollama.image.template","digest":"sha256:77c91b422cc9fce701d401b0ecd74a2d242dafd84983aa13f0766e9e71936db2","size":1383},{"mediaType":"application/vnd.ollama.image.license","digest":"sha256:c156170b718ec29139d3653d40ed1986fd92fb7e0959b5c71f3c48f62e6636f4","size":11344},{"mediaType":"application/vnd.ollama.image.params","digest":"sha256:f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216","size":59},{"mediaType":"application/vnd.ollama.image.system","digest":"sha256:75357d685f238b6afd7738be9786fdafde641eb6ca9a3be7471939715a68a4de","size":28}]}  

最后这个/library/qwen2/7b文件就是Qwen2:7b大模型的记录,我们用json格式来看更清晰一些:

$ python -m json.tool ~/.ollama/models/manifests/registry.ollama.ai/library/qwen2/7b                               
{                                                                                                                  
    "schemaVersion": 2,                                                                                            
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",                                           
    "config": {                                                                                                    
        "mediaType": "application/vnd.docker.container.image.v1+json",                                             
        "digest": "sha256:648f809ced2bdb9f26780f2f1cd9b4787804a4796b256ac5c7da05f4fa1729e6",                       
        "size": 485                                                                                                
    },                                                                                                             
    "layers": [                                                                                                    
        {                                                                                                          
            "mediaType": "application/vnd.ollama.image.model",                                                     
            "digest": "sha256:43f7a214e5329f672bb05404cfba1913cbb70fdaa1a17497224e1925046b0ed5",                   
            "size": 4431388192                                                                                     
        },                                                                                                         
        {                                                                                                          
            "mediaType": "application/vnd.ollama.image.template",                                                  
            "digest": "sha256:77c91b422cc9fce701d401b0ecd74a2d242dafd84983aa13f0766e9e71936db2",                   
            "size": 1383                                                                                           
        },                                                                                                         
        {                                                                                                          
            "mediaType": "application/vnd.ollama.image.license",                                                   
            "digest": "sha256:c156170b718ec29139d3653d40ed1986fd92fb7e0959b5c71f3c48f62e6636f4",                   
            "size": 11344                                                                                          
        },                                                                                                         
        {                                                                                                          
            "mediaType": "application/vnd.ollama.image.params",                                                    
            "digest": "sha256:f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216",                   
            "size": 59                                                                                             
        },                                                                                                         
        {                                                                                                          
            "mediaType": "application/vnd.ollama.image.system",                                                    
            "digest": "sha256:75357d685f238b6afd7738be9786fdafde641eb6ca9a3be7471939715a68a4de",                   
            "size": 28                                                                                             
        }                                                                                                          
    ]                                                                                                              
} 

其中layers[0]的"mediaType"为"application/vnd.ollama.image.model",它就是大模型啊,它的"digest"的值,实际就指向~/.ollama/models/blobs/目录下的大模型文件名,它的"size"是4431388192,与大模型文件的大小一致,原来大模型就长这个样哦!
进一步的,大模型文件里面的内容到底是些什么?以什么样的格式表示?这个大模型文件能被其他的大模型部署工具重用吗?能剪裁或者改造定制吗?毕竟它有4.4GB啊,而且这还算最小的一个大模型,下载不易,能不能通用呢?模型精调又怎么弄?这些问题都还有待进一步研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值