Spaces:
Paused
Paused
| """ | |
| Kaggle Ollama 备份与加载 - 快速验证脚本 | |
| 这个脚本帮助你验证 Ollama 和模型的位置,确保备份方案正确 | |
| 在 Kaggle Notebook 中运行此脚本,检查环境 | |
| """ | |
| import os | |
| import subprocess | |
| import shutil | |
| print("="*70) | |
| print("🔍 Kaggle Ollama 环境检查") | |
| print("="*70) | |
| # ==================== 检查 Ollama 安装 ==================== | |
| print("\n📍 步骤 1: 检查 Ollama 安装位置") | |
| ollama_bin = shutil.which('ollama') | |
| if ollama_bin: | |
| print(f" ✅ Ollama 已安装") | |
| print(f" 📂 位置: {ollama_bin}") | |
| # 检查文件信息 | |
| file_size = os.path.getsize(ollama_bin) / (1024**2) | |
| print(f" 📊 大小: {file_size:.2f} MB") | |
| # 检查版本 | |
| version_result = subprocess.run(['ollama', '--version'], capture_output=True, text=True) | |
| if version_result.returncode == 0: | |
| print(f" 📌 版本: {version_result.stdout.strip()}") | |
| else: | |
| print(" ❌ Ollama 未安装") | |
| print(" 💡 请先运行安装:") | |
| print(" !curl -fsSL https://ollama.com/install.sh | sh") | |
| # ==================== 检查 Ollama 服务 ==================== | |
| print("\n📍 步骤 2: 检查 Ollama 服务状态") | |
| ps_check = subprocess.run(['pgrep', '-f', 'ollama serve'], capture_output=True) | |
| if ps_check.returncode == 0: | |
| print(" ✅ Ollama 服务正在运行") | |
| else: | |
| print(" ⚠️ Ollama 服务未运行") | |
| print(" 💡 请启动服务:") | |
| print(" import subprocess, time") | |
| print(" subprocess.Popen(['ollama', 'serve'])") | |
| print(" time.sleep(15)") | |
| # ==================== 检查模型位置 ==================== | |
| print("\n📍 步骤 3: 检查模型存储位置") | |
| possible_dirs = [ | |
| "~/.ollama", | |
| "/root/.ollama", | |
| "~/.ollama/models", | |
| "/root/.ollama/models" | |
| ] | |
| found_dirs = [] | |
| for dir_path in possible_dirs: | |
| expanded_path = os.path.expanduser(dir_path) | |
| if os.path.exists(expanded_path): | |
| # 计算目录大小 | |
| total_size = 0 | |
| file_count = 0 | |
| for dirpath, dirnames, filenames in os.walk(expanded_path): | |
| for filename in filenames: | |
| fp = os.path.join(dirpath, filename) | |
| if os.path.exists(fp): | |
| total_size += os.path.getsize(fp) | |
| file_count += 1 | |
| size_gb = total_size / (1024**3) | |
| print(f"\n ✅ 找到: {expanded_path}") | |
| print(f" 📊 大小: {size_gb:.2f} GB") | |
| print(f" 📁 文件数: {file_count}") | |
| # 显示目录结构 | |
| print(f" 📂 内容:") | |
| for item in os.listdir(expanded_path)[:10]: # 只显示前10个 | |
| item_path = os.path.join(expanded_path, item) | |
| if os.path.isdir(item_path): | |
| print(f" • {item}/ (目录)") | |
| else: | |
| size = os.path.getsize(item_path) / (1024**2) | |
| print(f" • {item} ({size:.2f} MB)") | |
| found_dirs.append((expanded_path, size_gb)) | |
| if not found_dirs: | |
| print("\n ❌ 未找到模型目录") | |
| print(" 💡 请先下载模型:") | |
| print(" !ollama pull mistral") | |
| # ==================== 检查已下载的模型 ==================== | |
| print("\n📍 步骤 4: 检查已下载的模型") | |
| if ollama_bin and ps_check.returncode == 0: | |
| list_result = subprocess.run(['ollama', 'list'], capture_output=True, text=True) | |
| if list_result.returncode == 0: | |
| print("\n 已下载的模型:") | |
| print(" " + "-"*60) | |
| print(" " + list_result.stdout) | |
| else: | |
| print(" ⚠️ 无法获取模型列表") | |
| print(" 请确保 Ollama 服务正在运行") | |
| else: | |
| print(" ⚠️ Ollama 服务未运行,无法检查模型") | |
| # ==================== 推荐备份方案 ==================== | |
| print("\n" + "="*70) | |
| print("📋 推荐备份方案") | |
| print("="*70) | |
| if found_dirs: | |
| # 选择最大的目录(通常是完整的 .ollama 目录) | |
| backup_dir = max(found_dirs, key=lambda x: x[1])[0] | |
| backup_size = max(found_dirs, key=lambda x: x[1])[1] | |
| print(f"\n推荐备份目录: {backup_dir}") | |
| print(f"预计压缩包大小: ~{backup_size:.2f} GB") | |
| print(f"\n💾 备份步骤:") | |
| print(f""" | |
| 1. 使用 KAGGLE_SAVE_OLLAMA.py 脚本 | |
| exec(open('KAGGLE_SAVE_OLLAMA.py').read()) | |
| 2. 脚本会自动: | |
| • 找到 Ollama 二进制文件: {ollama_bin if ollama_bin else '未找到'} | |
| • 打包模型目录: {backup_dir} | |
| • 生成压缩包: /kaggle/working/ollama_backup/ | |
| 3. 下载并创建 Dataset: | |
| • 在 Notebook 右侧 Output 下载 ollama_backup 目录 | |
| • 访问 https://www.kaggle.com/datasets 创建 Dataset | |
| • 上传 ollama 和 ollama_models.tar.gz | |
| 4. 后续使用: | |
| • 添加 Dataset 到 Notebook | |
| • 运行 KAGGLE_LOAD_OLLAMA.py | |
| • 40-50秒完成加载! | |
| """) | |
| # 估算上传时间 | |
| upload_time_min = int(backup_size * 2) # 假设 2 分钟/GB | |
| upload_time_max = int(backup_size * 5) # 假设 5 分钟/GB | |
| print(f"⏱️ 预计时间:") | |
| print(f" • 压缩时间: {int(backup_size * 0.5)}-{int(backup_size)} 分钟") | |
| print(f" • 下载时间: {int(backup_size * 1)}-{int(backup_size * 3)} 分钟(取决于网络)") | |
| print(f" • 上传时间: {upload_time_min}-{upload_time_max} 分钟(取决于网络)") | |
| print(f" • 首次总计: ~{int(backup_size * 4)}-{int(backup_size * 10)} 分钟(一次性)") | |
| print(f" • 后续加载: 40-50 秒(每次)") | |
| else: | |
| print("\n⚠️ 未找到模型目录,无法提供备份方案") | |
| print("请先安装 Ollama 并下载模型") | |
| # ==================== 环境摘要 ==================== | |
| print("\n" + "="*70) | |
| print("📊 环境摘要") | |
| print("="*70) | |
| print(f""" | |
| Ollama 安装: {'✅ 是' if ollama_bin else '❌ 否'} | |
| Ollama 服务: {'✅ 运行中' if ps_check.returncode == 0 else '❌ 未运行'} | |
| 模型目录: {'✅ 找到 ' + str(len(found_dirs)) + ' 个' if found_dirs else '❌ 未找到'} | |
| 已下载模型: {'✅ 有' if ollama_bin and ps_check.returncode == 0 else '⚠️ 无法确认'} | |
| 准备就绪: {'✅ 可以开始备份' if (ollama_bin and found_dirs) else '❌ 请先完成安装和模型下载'} | |
| """) | |
| if ollama_bin and found_dirs: | |
| print("💡 下一步: 运行 KAGGLE_SAVE_OLLAMA.py 开始备份") | |
| else: | |
| print("💡 下一步: 完成 Ollama 安装和模型下载") | |
| print("\n" + "="*70) | |