Spaces:
Paused
Paused
File size: 8,165 Bytes
e9e8684 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
"""
Kaggle Ollama 保存脚本
将 Ollama 和模型保存到 Kaggle Dataset,下次直接使用
使用步骤:
1. 首次运行: 安装 Ollama 和下载模型后,运行本脚本保存
2. 后续使用: 使用 KAGGLE_LOAD_OLLAMA.py 从 Dataset 加载
注意: 需要手动创建 Kaggle Dataset 并上传
"""
import os
import subprocess
import shutil
import tarfile
import time
from pathlib import Path
print("="*70)
print("💾 Kaggle Ollama 保存工具")
print("="*70)
# ==================== 配置 ====================
OUTPUT_DIR = "/kaggle/working/ollama_backup"
MODEL_NAME = "mistral" # 或者 "phi", "tinyllama" 等
print(f"\n📋 配置:")
print(f" 模型: {MODEL_NAME}")
print(f" 输出目录: {OUTPUT_DIR}")
# ==================== 步骤 1: 创建输出目录 ====================
print(f"\n📁 步骤 1/4: 创建备份目录...")
os.makedirs(OUTPUT_DIR, exist_ok=True)
print(f" ✅ 目录创建成功")
# ==================== 步骤 2: 备份 Ollama 二进制文件 ====================
print(f"\n📦 步骤 2/4: 备份 Ollama 二进制文件...")
ollama_bin = shutil.which('ollama')
if ollama_bin:
print(f" 找到 Ollama: {ollama_bin}")
# 复制二进制文件
shutil.copy2(ollama_bin, os.path.join(OUTPUT_DIR, 'ollama'))
print(f" ✅ Ollama 二进制文件已备份")
else:
print(f" ❌ 未找到 Ollama,请先安装")
exit(1)
# ==================== 步骤 3: 备份模型文件 ====================
print(f"\n🤖 步骤 3/4: 备份 {MODEL_NAME} 模型...")
# Ollama 模型存储位置(可能在不同位置)
possible_model_dirs = [
os.path.expanduser("~/.ollama/models"),
"/root/.ollama/models",
os.path.expanduser("~/.ollama")
]
ollama_models_dir = None
for dir_path in possible_model_dirs:
if os.path.exists(dir_path) and os.path.isdir(dir_path):
# 检查是否有内容
if os.listdir(dir_path):
ollama_models_dir = os.path.dirname(dir_path) if dir_path.endswith('models') else dir_path
break
if ollama_models_dir and os.path.exists(ollama_models_dir):
print(f" 找到模型目录: {ollama_models_dir}")
# 计算目录大小
total_size = sum(
os.path.getsize(os.path.join(dirpath, filename))
for dirpath, dirnames, filenames in os.walk(ollama_models_dir)
for filename in filenames
)
print(f" 模型总大小: {total_size / (1024**3):.2f} GB")
# 创建压缩包(整个 .ollama 目录)
models_archive = os.path.join(OUTPUT_DIR, 'ollama_models.tar.gz')
print(f" 📦 创建压缩包(这可能需要几分钟)...")
print(f" 正在压缩: {ollama_models_dir}")
start_time = time.time()
with tarfile.open(models_archive, 'w:gz') as tar:
tar.add(ollama_models_dir, arcname='.ollama')
elapsed = time.time() - start_time
archive_size = os.path.getsize(models_archive) / (1024**3)
print(f" ✅ 压缩完成")
print(f" 耗时: {int(elapsed)}秒")
print(f" 压缩包大小: {archive_size:.2f} GB")
else:
print(f" ❌ 未找到模型目录")
print(f" 请先运行: ollama pull {MODEL_NAME}")
exit(1)
# ==================== 步骤 4: 生成说明文件 ====================
print(f"\n📝 步骤 4/4: 生成说明文件...")
readme_content = f"""# Ollama 备份包
## 内容
- `ollama`: Ollama 二进制文件
- `ollama_models.tar.gz`: 模型文件压缩包(包含 {MODEL_NAME})
## 备份信息
- 备份时间: {time.strftime('%Y-%m-%d %H:%M:%S')}
- 模型: {MODEL_NAME}
- 压缩包大小: {archive_size:.2f} GB
## 使用方法
### 1. 创建 Kaggle Dataset
1. 下载此目录中的所有文件到本地
2. 在 Kaggle 网站创建新 Dataset:
- 访问: https://www.kaggle.com/datasets
- 点击 "New Dataset"
- 上传 `ollama` 和 `ollama_models.tar.gz`
- 命名为: `ollama-{MODEL_NAME}-backup`
- 设置为 Private
- 点击 "Create"
### 2. 在 Notebook 中加载
在 Kaggle Notebook 中:
1. 添加 Dataset:
- 点击右侧 "Add data" → "Your Datasets"
- 选择你创建的 `ollama-{MODEL_NAME}-backup`
2. 运行加载脚本:
```python
# 使用项目中的 KAGGLE_LOAD_OLLAMA.py
exec(open('/kaggle/working/adaptive_RAG/KAGGLE_LOAD_OLLAMA.py').read())
```
### 3. 验证
```bash
# 检查 Ollama
ollama --version
# 检查模型
ollama list
# 测试运行
ollama run {MODEL_NAME} "Hello"
```
## 文件大小参考
不同模型的压缩包大小(近似值):
- qwen:0.5b: ~350 MB
- tinyllama: ~600 MB
- phi: ~1.6 GB
- mistral: ~4 GB
- llama2:7b: ~3.8 GB
## 注意事项
1. ⚠️ Dataset 大小限制:
- 免费用户: 每个 Dataset 最大 20GB
- 需要确保压缩包 < 20GB
2. ⚠️ 上传时间:
- 取决于你的网络速度
- 4GB 文件可能需要 10-30 分钟
3. ✅ 优势:
- 只需上传一次
- 每次 Notebook 启动时直接加载(秒级)
- 节省大量时间
## 故障排除
### 问题: 上传失败
解决: 检查网络连接,或分多次上传
### 问题: Dataset 过大
解决: 使用更小的模型(如 phi 或 tinyllama)
### 问题: 加载后 Ollama 无法运行
解决: 检查文件权限,运行 `chmod +x /usr/local/bin/ollama`
"""
readme_file = os.path.join(OUTPUT_DIR, 'README.md')
with open(readme_file, 'w', encoding='utf-8') as f:
f.write(readme_content)
print(f" ✅ 说明文件已生成")
# ==================== 生成加载脚本(供参考) ====================
loader_script = os.path.join(OUTPUT_DIR, 'load_example.py')
with open(loader_script, 'w', encoding='utf-8') as f:
f.write(f'''"""
示例: 从 Kaggle Dataset 加载 Ollama
"""
import os
import subprocess
import tarfile
import shutil
# Dataset 路径(根据你的 Dataset 名称修改)
DATASET_PATH = "/kaggle/input/ollama-{MODEL_NAME}-backup"
print("📦 从 Dataset 加载 Ollama...")
# 1. 复制 Ollama 二进制文件
ollama_bin = os.path.join(DATASET_PATH, "ollama")
if os.path.exists(ollama_bin):
shutil.copy2(ollama_bin, "/usr/local/bin/ollama")
os.chmod("/usr/local/bin/ollama", 0o755)
print("✅ Ollama 二进制文件已安装")
# 2. 解压模型文件
models_archive = os.path.join(DATASET_PATH, "ollama_models.tar.gz")
if os.path.exists(models_archive):
print("📦 解压模型文件...")
with tarfile.open(models_archive, 'r:gz') as tar:
tar.extractall(os.path.expanduser("~/.ollama"))
print("✅ 模型已解压")
# 3. 启动 Ollama 服务
print("🚀 启动 Ollama 服务...")
subprocess.Popen(['ollama', 'serve'])
import time
time.sleep(15)
print("✅ Ollama 已准备就绪!")
print("\\n验证:")
subprocess.run(['ollama', 'list'])
''')
print(f" ✅ 示例脚本已生成")
# ==================== 显示文件列表 ====================
print(f"\n📊 备份内容:")
for item in os.listdir(OUTPUT_DIR):
item_path = os.path.join(OUTPUT_DIR, item)
size = os.path.getsize(item_path)
size_str = f"{size / (1024**3):.2f} GB" if size > 1024**3 else f"{size / (1024**2):.2f} MB"
print(f" • {item}: {size_str}")
# ==================== 后续步骤说明 ====================
print("\n" + "="*70)
print("✅ 备份完成!")
print("="*70)
print(f"\n📋 后续步骤:")
print(f"""
1. 下载备份文件到本地:
在 Kaggle Notebook 右侧 Output 中下载 {OUTPUT_DIR} 目录
2. 创建 Kaggle Dataset:
• 访问: https://www.kaggle.com/datasets
• 点击 "New Dataset"
• 上传以下文件:
- ollama (二进制文件)
- ollama_models.tar.gz (模型压缩包)
• 命名: ollama-{MODEL_NAME}-backup
• 点击 "Create"
3. 下次使用:
• 在 Notebook 中添加你的 Dataset
• 运行 KAGGLE_LOAD_OLLAMA.py 脚本
• 即可秒级加载,无需重新下载!
⏱️ 时间对比:
• 传统方式: 每次启动需要 5-10 分钟下载
• Dataset 方式: 每次启动只需 10-20 秒加载
• 节省时间: 每次节省 5-10 分钟!
💡 提示:
• 上传 Dataset 是一次性工作
• 之后每次 Notebook 启动都能快速加载
• 强烈推荐!
""")
print("\n查看详细说明: cat {}/README.md".format(OUTPUT_DIR))
|