缘起
字节跳动在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还是有得搞的。
就准备开始动手整吧,仔细阅读了上面的参考文章,其中涉及到两种部署方式:Ollama方式和vLLM方式。我开始根本不知道这两个是啥,还以为是一个过程的两个步骤,借助豆包和Kimi,分别了解了下,原来是两种本地部署AI大模型的框架(或者说平台)。多的我也解释不来,直接打开参考文章中的链接了解吧。简单说,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 12月 17 18:17 ./
drwxr-xr-x 4 root root 4096 12月 17 18:17 ../
drwxr-xr-x 4 root root 4096 12月 17 18:17 ollama/
$ ll /usr/local/bin/lib/ollama/
总计 4653440
drwxr-xr-x 4 root root 4096 12月 17 18:17 ./
drwxr-xr-x 3 root root 4096 12月 17 18:17 ../
lrwxrwxrwx 1 root root 25 12月 17 18:17 libamd_comgr.so.2 -> libamd_comgr.so.2.7.60102*
-rwxr-xr-x 1 root root 149865832 12月 17 18:17 libamd_comgr.so.2.7.60102*
lrwxrwxrwx 1 root root 24 12月 17 18:17 libamdhip64.so.6 -> libamdhip64.so.6.1.60102*
-rwxr-xr-x 1 root root 27904952 12月 17 18:17 libamdhip64.so.6.1.60102*
lrwxrwxrwx 1 root root 25 12月 17 18:17 libcublasLt.so.11 -> libcublasLt.so.11.5.1.109*
-rwxr-xr-x 1 root root 263770264 12月 17 18:17 libcublasLt.so.11.5.1.109*
lrwxrwxrwx 1 root root 25 12月 17 18:17 libcublasLt.so.12 -> ./libcublasLt.so.12.4.5.8*
-rwxr-xr-x 1 root root 441938896 12月 17 18:17 libcublasLt.so.12.4.5.8*
lrwxrwxrwx 1 root root 23 12月 17 18:17 libcublas.so.11 -> libcublas.so.11.5.1.109*
-rwxr-xr-x 1 root root 121866104 12月 17 18:17 libcublas.so.11.5.1.109*
lrwxrwxrwx 1 root root 23 12月 17 18:17 libcublas.so.12 -> ./libcublas.so.12.4.5.8*
-rwxr-xr-x 1 root root 109604768 12月 17 18:17 libcublas.so.12.4.5.8*
lrwxrwxrwx 1 root root 21 12月 17 18:17 libcudart.so.11.0 -> libcudart.so.11.3.109*
-rwxr-xr-x 1 root root 619192 12月 17 18:17 libcudart.so.11.3.109*
lrwxrwxrwx 1 root root 21 12月 17 18:17 libcudart.so.12 -> libcudart.so.12.4.127*
-rwxr-xr-x 1 root root 707904 12月 17 18:17 libcudart.so.12.4.127*
lrwxrwxrwx 1 root root 22 12月 17 18:17 libdrm_amdgpu.so.1 -> libdrm_amdgpu.so.1.0.0*
-rwxr-xr-x 1 root root 57568 12月 17 18:17 libdrm_amdgpu.so.1.0.0*
lrwxrwxrwx 1 root root 15 12月 17 18:17 libdrm.so.2 -> libdrm.so.2.4.0*
-rwxr-xr-x 1 root root 102328 12月 17 18:17 libdrm.so.2.4.0*
-rwxr-xr-x 1 root root 99944 12月 17 18:17 libelf-0.176.so*
lrwxrwxrwx 1 root root 15 12月 17 18:17 libelf.so.1 -> libelf-0.176.so*
lrwxrwxrwx 1 root root 25 12月 17 18:17 libhipblaslt.so.0 -> libhipblaslt.so.0.7.60102*
-rwxr-xr-x 1 root root 9946264 12月 17 18:17 libhipblaslt.so.0.7.60102*
lrwxrwxrwx 1 root root 23 12月 17 18:17 libhipblas.so.2 -> libhipblas.so.2.1.60102*
-rwxr-xr-x 1 root root 1073688 12月 17 18:17 libhipblas.so.2.1.60102*
lrwxrwxrwx 1 root root 30 12月 17 18:17 libhsa-runtime64.so.1 -> libhsa-runtime64.so.1.13.60102*
-rwxr-xr-x 1 root root 3089448 12月 17 18:17 libhsa-runtime64.so.1.13.60102*
lrwxrwxrwx 1 root root 16 12月 17 18:17 libnuma.so.1 -> libnuma.so.1.0.0*
-rwxr-xr-x 1 root root 50704 12月 17 18:17 libnuma.so.1.0.0*
lrwxrwxrwx 1 root root 23 12月 17 18:17 librocblas.so.4 -> librocblas.so.4.1.60102*
-rwxr-xr-x 1 root root 881735968 12月 17 18:17 librocblas.so.4.1.60102*
lrwxrwxrwx 1 root root 32 12月 17 18:17 librocprofiler-register.so.0 -> librocprofiler-register.so.0.3.0*
-rwxr-xr-x 1 root root 1049792 12月 17 18:17 librocprofiler-register.so.0.3.0*
lrwxrwxrwx 1 root root 25 12月 17 18:17 librocsolver.so.0 -> librocsolver.so.0.1.60102*
-rwxr-xr-x 1 root root 1384333400 12月 17 18:17 librocsolver.so.0.1.60102*
lrwxrwxrwx 1 root root 25 12月 17 18:17 librocsparse.so.1 -> librocsparse.so.1.0.60102*
-rwxr-xr-x 1 root root 1367043336 12月 17 18:17 librocsparse.so.1.0.60102*
lrwxrwxrwx 1 root root 15 12月 17 18:17 libtinfo.so.5 -> libtinfo.so.5.9*
-rwxr-xr-x 1 root root 174576 12月 17 18:17 libtinfo.so.5.9*
drwxr-xr-x 3 root root 4096 12月 17 18:17 rocblas/
drwxr-xr-x 7 root root 4096 12月 17 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
12月 21 03:14:07 allen-tp2 ollama[7270]: [GIN-debug] HEAD / --> github.com/ollama/ollama>
12月 21 03:14:07 allen-tp2 ollama[7270]: [GIN-debug] HEAD /api/tags --> github.com/ollama/ollama>
12月 21 03:14:07 allen-tp2 ollama[7270]: [GIN-debug] HEAD /api/version --> github.com/ollama/ollama>
12月 21 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>
12月 21 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>
12月 21 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>
12月 21 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 12月 21 03:53 ./
drwxr-x--- 21 allen allen 4096 12月 21 03:14 ../
-rw------- 1 allen allen 81 12月 21 03:53 history
-rw------- 1 allen allen 387 12月 21 03:14 id_ed25519
-rw-r--r-- 1 allen allen 81 12月 21 03:14 id_ed25519.pub
drwxr-xr-x 4 allen allen 4096 12月 21 03:17 models/
$ ll .ollama/models/
总计 16
drwxr-xr-x 4 allen allen 4096 12月 21 03:17 ./
drwxr-xr-x 3 allen allen 4096 12月 21 03:53 ../
drwxr-xr-x 2 allen allen 4096 12月 21 03:51 blobs/
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 manifests/
$ ll .ollama/models/blobs/
总计 4327568
drwxr-xr-x 2 allen allen 4096 12月 21 03:51 ./
drwxr-xr-x 4 allen allen 4096 12月 21 03:17 ../
-rw-r--r-- 1 allen allen 4431388192 12月 21 03:51 sha256-43f7a214e5329f672bb05404cfba1913cbb70fdaa1a17497224e1925046b0ed5
-rw-r--r-- 1 allen allen 485 12月 21 03:51 sha256-648f809ced2bdb9f26780f2f1cd9b4787804a4796b256ac5c7da05f4fa1729e6
-rw-r--r-- 1 allen allen 28 12月 21 03:51 sha256-75357d685f238b6afd7738be9786fdafde641eb6ca9a3be7471939715a68a4de
-rw-r--r-- 1 allen allen 1383 12月 21 03:51 sha256-77c91b422cc9fce701d401b0ecd74a2d242dafd84983aa13f0766e9e71936db2
-rw-r--r-- 1 allen allen 11344 12月 21 03:51 sha256-c156170b718ec29139d3653d40ed1986fd92fb7e0959b5c71f3c48f62e6636f4
-rw-r--r-- 1 allen allen 59 12月 21 03:51 sha256-f02dd72bb2423204352eabc5637b44d79d17f109fdb510a7c51455892aa2d216
$ ll .ollama/models/manifests/
总计 12
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 ./
drwxr-xr-x 4 allen allen 4096 12月 21 03:17 ../
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 registry.ollama.ai/
$ ll .ollama/models/manifests/registry.ollama.ai/
总计 12
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 ./
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 ../
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 library/
$ ll .ollama/models/manifests/registry.ollama.ai/library/
总计 12
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 ./
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 ../
drwxr-xr-x 2 allen allen 4096 12月 21 03:51 qwen2/
$ ll .ollama/models/manifests/registry.ollama.ai/library/qwen2/
总计 12
drwxr-xr-x 2 allen allen 4096 12月 21 03:51 ./
drwxr-xr-x 3 allen allen 4096 12月 21 03:51 ../
-rw-r--r-- 1 allen allen 1003 12月 21 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啊,而且这还算最小的一个大模型,下载不易,能不能通用呢?模型精调又怎么弄?这些问题都还有待进一步研究。