当前位置: 首页 > article >正文

善用Git LFS来降低模型文件对磁盘的占用

将讲一个实际的例子:对于模型文件,动辄就是好几个G,而有的仓库更是高达几十G,拉一个仓库到本地,稍不注意直接磁盘拉满都有可能。
比如:meta-llama-3.1-8b-instruct,拉到本地后发现居然占用了60G,不得了。

还好有Git LFS 这个大文件管理工具,Git LFS 就好像是一个图书馆。图书馆里有很多书(大文件),但你不需要把所有的书都搬回家,你只需要借阅你需要的书就可以了。Git LFS 就是这个图书馆,它帮你管理这些大文件,让你随时随地都可以“借阅”到它们。

1 . 查看哪些类型的文件需要被追踪:

$ git lfs track
Listing tracked patterns
    *.7z (.gitattributes)
    *.ckpt (.gitattributes)
    *.model (.gitattributes)
    *.onnx (.gitattributes)
    *.pickle (.gitattributes)
    *.pth (.gitattributes)
    *.safetensors (.gitattributes)
    ...
    ...
Listing excluded patterns

这里列出来被追踪的文件对应.gitattributes这个配置文件。

2 . 查看被追踪的大文件是哪些:

$ git lfs ls-files
2b1879f356 * model-00001-of-00004.safetensors
09d433f650 * model-00002-of-00004.safetensors
fc1cdddd6b * model-00003-of-00004.safetensors
92ecfe1a24 * model-00004-of-00004.safetensors
ab33d910f4 * original/consolidated.00.pth
82e9d31979 * original/tokenizer.model

在拉取时,可以临时设置GIT_LFS_SKIP_SMUDGE=1

$ GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/LLM-Research/meta-llama-3.1-8b-instruct.git
Cloning into 'meta-llama-3.1-8b-instruct'...
remote: Enumerating objects: 55, done.
remote: Total 55 (delta 0), reused 0 (delta 0), pack-reused 55
Receiving objects: 100% (55/55), 2.25 MiB | 7.63 MiB/s, done.
Resolving deltas: 100% (19/19), done.

$ cd meta-llama-3.1-8b-instruct/

$ du -sh
12M   

这样就会跳过被追踪的大文件,进行代码仓库的克隆。


当需要用到某些大文件时,再单独拉取指定文件:

$ git lfs fetch --include="original/tokenizer.model"
fetch: Fetching reference refs/heads/master
Downloading LFS objects: 100% (1/1), 2.2 MB | 0 B/s

$ git lfs checkout original/tokenizer.model
Checking out LFS objects: 100% (1/1), 2.2 MB | 0 B/s, done.

$ du -sh
16M     .
$ git lfs fetch --include="*.safetensors"
fetch: Fetching reference refs/heads/master
Downloading LFS objects: 100% (4/4), 19 GB | 75 MB/s

$ du -sh
15G     .

$ git lfs checkout *.safetensors
Checking out LFS objects: 100% (4/4), 16 GB | 179 MB/s, done.

$ du -sh
30G   

疑问:为什么git lfs fetch变成了15G,而git checkout 变成了30G呢?

git lfs fetch 是将文件下载到.git/lfs/objects目录下,当然是一些对象格式的文件,以便后续检出。
git lfs checkout 是将.git/lfs/objects下的对象格式文件检出到工作目录,所以这里又增加了一倍的空间占用。

甚至检出后,可以直接将这个.git目录删除掉,这样就可以使占用空间最小,只保留了需要用到的模型文件。


刚刚去看了一下,为什么一开始说clone下来是60多G,因为它仓库原本还有一个.pth文件,我们没有git lfs fetchgit lfs checkout,自然整体少占用了30G左右的空间。
在这里插入图片描述


码字不易,希望对遇到相同问题的朋友有所帮助。


http://www.kler.cn/a/384872.html

相关文章:

  • C++:map 和 set 的使用
  • 使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
  • 【CUDA】线程配置
  • VMware Workstation安装Centos系统
  • creo toolkit二次开发学习之获取父对象
  • 分布式——BASE理论
  • 可视化建模与UML《顺序图实验报告》
  • 前后端交互通用排序策略
  • 基于TRIZ的教育机器人功能创新
  • 若依未分离版集成达梦数据库
  • C++异常:基本语法
  • 深入浅出 Spring Boot 与 Shiro:构建安全认证与权限管理框架
  • 基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
  • [linux]docker基础
  • uniapp 下拉选择器picker
  • 从配置anaconda到配置pycharm
  • C#笔记 —— 事件
  • 第3章 CentOS系统管理
  • ssm063基于SSM框架的德云社票务系统的设计与实现+vue(论文+源码)_kaic
  • vue3 element-plus el-scrollbar 自动滚动
  • Webserver(5.5)解析HTTP请求报文
  • 在PHP中使用UTF-8编码防止乱码需要注意以下几点‌:
  • vue种ref跟reactive的区别?
  • VisionPro —— CogIPOneImgeTool工具详解
  • 【论文速读】| RePD:通过基于检索的提示分解过程防御越狱攻击
  • 10.Node.js连接MongoDb