Nunchaku FLUX.1 CustomV3与MySQL集成:构建AI图像生成管理系统
想象一下,你搭建了一个强大的AI图像生成系统,每天能产出成百上千张精美的图片。但很快,问题就来了:生成的图片散落在各个文件夹里,找不到对应的提示词;用户权限混乱,谁都能随意调用;想统计一下哪种风格最受欢迎,却要从海量文件中手动筛选……这场景是不是很熟悉?
没错,当AI图像生成从个人玩具变成团队工具时,管理就成了大问题。今天,我就来分享一个实战方案:如何将Nunchaku FLUX.1 CustomV3这个高效的图像生成引擎,与MySQL数据库深度集成,打造一个真正可用的AI图像生成管理系统。
1. 为什么需要管理系统?
在深入技术细节之前,我们先聊聊为什么单纯的图像生成工具不够用。
我见过不少团队,刚开始用AI生成图片时都很兴奋,但用着用着就陷入了管理泥潭。图片命名混乱、元数据丢失、权限失控、数据无法复用……这些问题看似不大,但积累起来会严重拖慢整个创作流程。
一个好的管理系统应该解决这些问题:
- 图片可追溯:每张图都能找到对应的生成参数和用户
- 权限可控:不同角色有不同的使用权限
- 数据可分析:能统计使用情况,优化资源分配
- 流程可复用:成功的生成配方可以保存和分享
这就是我们要构建的系统核心价值。
2. 系统架构设计
整个系统的架构其实很清晰,主要分为三层:
用户界面层 → 业务逻辑层 → 数据存储层 ↓ ↓ ↓ Web界面 Python服务 MySQL数据库 或API接口 (Flask/FastAPI) + 文件存储数据存储层是今天重点要讲的。我们需要在MySQL中设计合理的表结构,既要存储图像生成的元数据,又要管理用户和权限。
2.1 核心数据表设计
我设计了一套经过实战检验的表结构,包含5个核心表:
-- 用户表:管理使用系统的所有人员 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, role ENUM('admin', 'editor', 'viewer') DEFAULT 'viewer', api_key VARCHAR(64) UNIQUE, daily_limit INT DEFAULT 100, -- 每日生成次数限制 total_used INT DEFAULT 0, -- 总使用次数 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_username (username), INDEX idx_api_key (api_key) ); -- 生成任务表:记录每次图像生成的完整信息 CREATE TABLE generation_tasks ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, prompt TEXT NOT NULL, -- 正面提示词 negative_prompt TEXT, -- 负面提示词 width INT DEFAULT 1024, height INT DEFAULT 1024, steps INT DEFAULT 25, guidance_scale DECIMAL(3,1) DEFAULT 3.5, seed BIGINT, -- 随机种子 model_version VARCHAR(50) DEFAULT 'flux.1-customv3', status ENUM('pending', 'processing', 'completed', 'failed') DEFAULT 'pending', image_path VARCHAR(500), -- 图片存储路径 thumbnail_path VARCHAR(500), -- 缩略图路径 generation_time_ms INT, -- 生成耗时(毫秒) gpu_memory_used_mb INT, -- GPU显存使用量 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, completed_at TIMESTAMP NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_user_id (user_id), INDEX idx_status (status), INDEX idx_created_at (created_at) ); -- 图片标签表:为生成的图片打标签,方便分类检索 CREATE TABLE image_tags ( id INT PRIMARY KEY AUTO_INCREMENT, task_id INT NOT NULL, tag_name VARCHAR(50) NOT NULL, confidence_score DECIMAL(3,2), -- 标签置信度(如果有自动标签功能) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (task_id) REFERENCES generation_tasks(id) ON DELETE CASCADE, UNIQUE KEY uk_task_tag (task_id, tag_name), INDEX idx_tag_name (tag_name) ); -- 风格预设表:保存常用的生成参数组合 CREATE TABLE style_presets ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, description TEXT, prompt_template TEXT NOT NULL, negative_prompt_template TEXT, width INT DEFAULT 1024, height INT DEFAULT 1024, steps INT DEFAULT 25, guidance_scale DECIMAL(3,1) DEFAULT 3.5, created_by INT NOT NULL, is_public BOOLEAN DEFAULT FALSE, -- 是否公开给所有用户 usage_count INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_is_public (is_public), INDEX idx_created_by (created_by) ); -- 使用统计表:记录系统使用情况,用于分析和优化 CREATE TABLE usage_statistics ( id INT PRIMARY KEY AUTO_INCREMENT, date DATE NOT NULL, user_id INT NOT NULL, total_tasks INT DEFAULT 0, completed_tasks INT DEFAULT 0, failed_tasks INT DEFAULT 0, total_generation_time_ms BIGINT DEFAULT 0, avg_generation_time_ms INT DEFAULT 0, peak_concurrent_tasks INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_date_user (date, user_id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, INDEX idx_date (date) );这个设计有几个关键考虑:
用户权限分离:通过
role字段控制不同用户的权限,管理员可以管理所有内容,编辑者可以创建预设,查看者只能使用现有功能。完整任务追踪:
generation_tasks表记录了从提示词到生成结果的完整链路,甚至包括GPU使用情况,这对于优化和排错非常有用。标签系统:
image_tags表让图片变得可搜索。你可以手动打标签,也可以集成自动标签识别服务。预设共享:
style_presets表让团队可以积累和复用成功的生成"配方",新成员也能快速上手。使用统计:
usage_statistics表为资源分配和系统优化提供数据支持。
3. 关键技术实现
有了数据库设计,接下来看看如何将Nunchaku FLUX.1 CustomV3与这个数据库系统连接起来。
3.1 数据库连接与配置
我推荐使用SQLAlchemy作为ORM工具,它能让数据库操作更Pythonic,也更容易维护:
# database.py from sqlalchemy import create_engine, Column, Integer, String, Text, Float, DateTime, Boolean, Enum, ForeignKey from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from datetime import datetime import enum Base = declarative_base() # 定义枚举类型 class UserRole(enum.Enum): ADMIN = "admin" EDITOR = "editor" VIEWER = "viewer" class TaskStatus(enum.Enum): PENDING = "pending" PROCESSING = "processing" COMPLETED = "completed" FAILED = "failed" # 用户模型 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String(50), unique=True, nullable=False) email = Column(String(100), unique=True, nullable=False) password_hash = Column(String(255), nullable=False) role = Column(Enum(UserRole), default=UserRole.VIEWER) api_key = Column(String(64), unique=True) daily_limit = Column(Integer, default=100) total_used = Column(Integer, default=0) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 关系 tasks = relationship("GenerationTask", back_populates="user") presets = relationship("StylePreset", back_populates="creator") # 生成任务模型 class GenerationTask(Base): __tablename__ = 'generation_tasks' id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('users.id'), nullable=False) prompt = Column(Text, nullable=False) negative_prompt = Column(Text) width = Column(Integer, default=1024) height = Column(Integer, default=1024) steps = Column(Integer, default=25) guidance_scale = Column(Float, default=3.5) seed = Column(Integer) model_version = Column(String(50), default='flux.1-customv3') status = Column(Enum(TaskStatus), default=TaskStatus.PENDING) image_path = Column(String(500)) thumbnail_path = Column(String(500)) generation_time_ms = Column(Integer) gpu_memory_used_mb = Column(Integer) created_at = Column(DateTime, default=datetime.utcnow) completed_at = Column(DateTime) # 关系 user = relationship("User", back_populates="tasks") tags = relationship("ImageTag", back_populates="task") # 数据库初始化 def init_database(db_url="mysql+pymysql://username:password@localhost/ai_image_db"): engine = create_engine(db_url, pool_pre_ping=True, pool_recycle=3600) Base.metadata.create_all(engine) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) return SessionLocal3.2 图像生成服务集成
这是核心部分,我们需要把Nunchaku FLUX.1 CustomV3的生成能力封装成服务,并与数据库交互:
# image_service.py import torch from diffusers import FluxPipeline from nunchaku import NunchakuFluxTransformer2dModel from nunchaku.utils import get_precision from database import SessionLocal, GenerationTask, TaskStatus, ImageTag from datetime import datetime import hashlib import os from PIL import Image import io class ImageGenerationService: def __init__(self, model_path=None): # 初始化Nunchaku FLUX.1 CustomV3 self.precision = get_precision() # 加载量化模型 transformer = NunchakuFluxTransformer2dModel.from_pretrained( f"nunchaku-tech/nunchaku-flux.1-dev/svdq-{self.precision}_r32-flux.1-dev.safetensors" ) # 创建pipeline self.pipeline = FluxPipeline.from_pretrained( "black-forest-labs/FLUX.1-dev", transformer=transformer, torch_dtype=torch.bfloat16 ).to("cuda") # 图片存储目录 self.image_base_dir = "./generated_images" os.makedirs(self.image_base_dir, exist_ok=True) def generate_image(self, task_id, prompt, negative_prompt=None, width=1024, height=1024, steps=25, guidance_scale=3.5, seed=None): """生成图像并保存到数据库""" db = SessionLocal() try: # 更新任务状态为处理中 task = db.query(GenerationTask).filter(GenerationTask.id == task_id).first() if not task: raise ValueError(f"任务 {task_id} 不存在") task.status = TaskStatus.PROCESSING db.commit() # 设置随机种子 if seed is None: seed = torch.randint(0, 2**32 - 1, (1,)).item() # 记录开始时间 start_time = datetime.utcnow() # 调用Nunchaku生成图像 with torch.no_grad(): image = self.pipeline( prompt=prompt, negative_prompt=negative_prompt, height=height, width=width, num_inference_steps=steps, guidance_scale=guidance_scale, generator=torch.Generator(device="cuda").manual_seed(seed) ).images[0] # 计算生成时间 end_time = datetime.utcnow() generation_time_ms = int((end_time - start_time).total_seconds() * 1000) # 获取GPU内存使用情况 gpu_memory_used = torch.cuda.max_memory_allocated() // 1024 // 1024 # 生成文件名(使用任务ID和哈希) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename_hash = hashlib.md5(f"{task_id}_{timestamp}".encode()).hexdigest()[:8] filename = f"task_{task_id}_{filename_hash}.png" # 保存图片 image_path = os.path.join(self.image_base_dir, filename) image.save(image_path, format="PNG") # 创建缩略图 thumbnail = image.copy() thumbnail.thumbnail((256, 256)) thumbnail_path = os.path.join(self.image_base_dir, f"thumb_{filename}") thumbnail.save(thumbnail_path, format="PNG") # 更新任务记录 task.status = TaskStatus.COMPLETED task.image_path = image_path task.thumbnail_path = thumbnail_path task.generation_time_ms = generation_time_ms task.gpu_memory_used_mb = gpu_memory_used task.completed_at = end_time task.seed = seed # 自动提取标签(简单示例,实际可以使用更复杂的NLP模型) tags = self._extract_tags_from_prompt(prompt) for tag in tags: image_tag = ImageTag(task_id=task_id, tag_name=tag) db.add(image_tag) db.commit() return { "task_id": task_id, "image_path": image_path, "thumbnail_path": thumbnail_path, "generation_time_ms": generation_time_ms, "gpu_memory_mb": gpu_memory_used, "seed": seed } except Exception as e: # 记录失败 if 'task' in locals(): task.status = TaskStatus.FAILED db.commit() raise e finally: db.close() def _extract_tags_from_prompt(self, prompt): """从提示词中提取关键词作为标签(简化版)""" # 这里可以集成更复杂的NLP处理 common_tags = ["portrait", "landscape", "fantasy", "sci-fi", "anime", "realistic", "abstract", "minimalist", "detailed"] tags = [] prompt_lower = prompt.lower() for tag in common_tags: if tag in prompt_lower: tags.append(tag) # 限制标签数量 return tags[:5] def create_generation_task(self, user_id, prompt, **kwargs): """创建新的生成任务""" db = SessionLocal() try: # 检查用户每日限制 user = db.query(User).filter(User.id == user_id).first() if user.total_used >= user.daily_limit: raise PermissionError("已达到每日生成限制") # 创建任务记录 task = GenerationTask( user_id=user_id, prompt=prompt, negative_prompt=kwargs.get('negative_prompt'), width=kwargs.get('width', 1024), height=kwargs.get('height', 1024), steps=kwargs.get('steps', 25), guidance_scale=kwargs.get('guidance_scale', 3.5), seed=kwargs.get('seed') ) db.add(task) db.commit() db.refresh(task) # 更新用户使用计数 user.total_used += 1 db.commit() return task.id finally: db.close()3.3 查询优化与索引策略
当数据量变大时,查询性能就变得很重要。我针对几个常见场景做了优化:
-- 1. 用户任务历史查询优化 -- 用户经常需要查看自己的生成历史,按时间倒序 CREATE INDEX idx_user_created ON generation_tasks(user_id, created_at DESC); -- 2. 标签搜索优化 -- 用户可能通过标签查找图片 CREATE INDEX idx_tag_task ON image_tags(tag_name, task_id); -- 3. 统计查询优化 -- 管理员需要查看系统使用统计 CREATE INDEX idx_stat_date ON usage_statistics(date DESC); -- 4. 预设使用频率查询 -- 热门预设应该快速检索 CREATE INDEX idx_preset_usage ON style_presets(usage_count DESC, is_public);在代码层面,我们也需要优化查询:
# query_optimizer.py from sqlalchemy import func, desc class QueryService: def __init__(self, db_session): self.db = db_session def get_user_tasks(self, user_id, page=1, page_size=20): """分页获取用户任务,优化查询性能""" # 使用offset/limit分页,对于大数据量考虑使用keyset分页 query = self.db.query(GenerationTask).filter( GenerationTask.user_id == user_id ).order_by(desc(GenerationTask.created_at)) total = query.count() tasks = query.offset((page - 1) * page_size).limit(page_size).all() return { "tasks": tasks, "total": total, "page": page, "page_size": page_size, "total_pages": (total + page_size - 1) // page_size } def search_by_tags(self, tags, user_id=None, limit=50): """通过标签搜索图片,使用JOIN优化""" query = self.db.query(GenerationTask).join(ImageTag).filter( ImageTag.tag_name.in_(tags) ) if user_id: query = query.filter(GenerationTask.user_id == user_id) # 使用distinct避免重复 tasks = query.distinct().order_by(desc(GenerationTask.created_at)).limit(limit).all() return tasks def get_system_statistics(self, start_date, end_date): """获取系统统计信息,使用聚合查询""" stats = self.db.query( func.date(GenerationTask.created_at).label('date'), func.count(GenerationTask.id).label('total_tasks'), func.sum(case([(GenerationTask.status == 'completed', 1)], else_=0)).label('completed_tasks'), func.avg(GenerationTask.generation_time_ms).label('avg_time_ms'), func.max(GenerationTask.gpu_memory_used_mb).label('peak_gpu_memory') ).filter( GenerationTask.created_at.between(start_date, end_date) ).group_by( func.date(GenerationTask.created_at) ).order_by( desc('date') ).all() return stats3.4 权限控制实现
权限控制是管理系统的核心。我实现了一个基于角色的访问控制(RBAC)系统:
# auth_service.py from functools import wraps from database import SessionLocal, User, UserRole import jwt import datetime from werkzeug.security import generate_password_hash, check_password_hash class AuthService: SECRET_KEY = "your-secret-key-change-in-production" @staticmethod def hash_password(password): return generate_password_hash(password) @staticmethod def verify_password(hashed_password, password): return check_password_hash(hashed_password, password) @staticmethod def create_token(user_id, username, role): """创建JWT令牌""" payload = { 'user_id': user_id, 'username': username, 'role': role, 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=24) } return jwt.encode(payload, AuthService.SECRET_KEY, algorithm='HS256') @staticmethod def verify_token(token): """验证JWT令牌""" try: payload = jwt.decode(token, AuthService.SECRET_KEY, algorithms=['HS256']) return payload except jwt.ExpiredSignatureError: raise ValueError("令牌已过期") except jwt.InvalidTokenError: raise ValueError("无效令牌") @staticmethod def require_role(required_role): """装饰器:检查用户角色权限""" def decorator(f): @wraps(f) def decorated_function(*args, **kwargs): token = kwargs.get('token') or args[0].get('token') if not token: raise PermissionError("需要认证令牌") payload = AuthService.verify_token(token) user_role = UserRole(payload['role']) # 检查权限层级 role_hierarchy = { UserRole.ADMIN: [UserRole.ADMIN, UserRole.EDITOR, UserRole.VIEWER], UserRole.EDITOR: [UserRole.EDITOR, UserRole.VIEWER], UserRole.VIEWER: [UserRole.VIEWER] } if user_role not in role_hierarchy or required_role not in role_hierarchy[user_role]: raise PermissionError(f"需要 {required_role.value} 权限,当前为 {user_role.value}") return f(*args, **kwargs) return decorated_function return decorator # 使用示例 class TaskManager: def __init__(self, db_session): self.db = db_session @AuthService.require_role(UserRole.VIEWER) def create_task(self, user_data, prompt, **kwargs): """任何登录用户都可以创建任务""" # 实现创建任务的逻辑 pass @AuthService.require_role(UserRole.EDITOR) def create_preset(self, user_data, preset_data): """只有编辑者和管理员可以创建预设""" # 实现创建预设的逻辑 pass @AuthService.require_role(UserRole.ADMIN) def delete_user(self, admin_data, target_user_id): """只有管理员可以删除用户""" # 实现删除用户的逻辑 pass4. 实际应用场景
这套系统在实际项目中能发挥什么作用?我分享几个真实案例:
4.1 电商内容创作团队
一个电商团队有10个设计师,每天需要为不同商品生成营销图片。使用我们的系统后:
- 效率提升:设计师不再需要手动整理图片,所有生成记录自动归档
- 风格统一:创建了"产品展示"、"节日促销"等预设,确保品牌风格一致
- 权限管理:实习生只能使用现有预设,资深设计师可以创建新预设
- 数据分析:发现"简约白色背景"的预设使用率最高,优化了资源分配
4.2 游戏美术概念设计
一个游戏开发团队用AI生成概念图:
- 版本管理:每个角色设计都有完整的生成历史,可以回溯到任何版本
- 标签系统:通过"奇幻"、"中世纪"、"盔甲"等标签快速找到参考图
- 协作分享:美术总监创建的预设可以分享给整个团队
- 资源优化:统计显示512x512的草图生成最快,用于初期构思;最终稿才用1024x1024
4.3 教育机构AI课程
一个培训机构用这个系统教学:
- 学生管理:每个学生有独立的账户和生成限额
- 作业提交:学生提交的作业自动关联生成参数,老师可以复现结果
- 优秀案例:将优秀作品保存为预设,供其他学生学习
- 进度跟踪:通过使用统计了解学生的学习进度和兴趣点
5. 部署与维护建议
如果你打算部署这套系统,这里有一些实用建议:
5.1 部署架构
前端 (React/Vue) → API网关 (Nginx) → 应用服务器 (FastAPI) → MySQL数据库 ↓ 图像生成服务 (GPU服务器)5.2 数据库备份策略
-- 每天凌晨备份 -- 使用MySQL的mysqldump mysqldump -u username -p ai_image_db > backup_$(date +%Y%m%d).sql -- 保留最近7天的备份 find /backup -name "backup_*.sql" -mtime +7 -delete5.3 监控与告警
# monitoring.py import psutil import pymysql from datetime import datetime import logging class SystemMonitor: def check_database_health(self): """检查数据库连接和性能""" try: conn = pymysql.connect( host='localhost', user='monitor', password='password', database='ai_image_db' ) with conn.cursor() as cursor: # 检查连接数 cursor.execute("SHOW STATUS LIKE 'Threads_connected'") threads_connected = cursor.fetchone()[1] # 检查慢查询 cursor.execute("SHOW STATUS LIKE 'Slow_queries'") slow_queries = cursor.fetchone()[1] # 检查表锁 cursor.execute("SHOW OPEN TABLES WHERE In_use > 0") locked_tables = cursor.fetchall() return { "timestamp": datetime.now().isoformat(), "threads_connected": int(threads_connected), "slow_queries": int(slow_queries), "locked_tables": len(locked_tables), "status": "healthy" if int(threads_connected) < 100 else "warning" } except Exception as e: logging.error(f"数据库健康检查失败: {e}") return {"status": "error", "error": str(e)} def check_gpu_health(self): """检查GPU状态""" try: import pynvml pynvml.nvmlInit() device_count = pynvml.nvmlDeviceGetCount() gpu_info = [] for i in range(device_count): handle = pynvml.nvmlDeviceGetHandleByIndex(i) util = pynvml.nvmlDeviceGetUtilizationRates(handle) memory = pynvml.nvmlDeviceGetMemoryInfo(handle) temp = pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU) gpu_info.append({ "index": i, "utilization": util.gpu, "memory_used_mb": memory.used // 1024 // 1024, "memory_total_mb": memory.total // 1024 // 1024, "temperature": temp }) pynvml.nvmlShutdown() return { "timestamp": datetime.now().isoformat(), "gpu_count": device_count, "gpus": gpu_info } except ImportError: return {"error": "pynvml not installed"} except Exception as e: return {"error": str(e)}5.4 性能优化建议
- 数据库连接池:使用SQLAlchemy的连接池,避免频繁创建连接
- 查询缓存:对频繁查询的结果进行缓存(如热门预设列表)
- 图片CDN:生成的图片可以上传到CDN,减轻服务器压力
- 异步处理:图像生成任务使用消息队列异步处理
- 定期清理:定期清理过期的临时文件和失败的任务记录
6. 总结
将Nunchaku FLUX.1 CustomV3与MySQL集成,构建一个完整的AI图像生成管理系统,看起来工程量大,但带来的价值是实实在在的。这套系统不仅解决了图像生成后的管理问题,更重要的是让AI创作变得可追溯、可管理、可优化。
从我实际实施的经验来看,最大的挑战不是技术实现,而是如何设计出符合团队工作流程的数据模型。每个团队的使用习惯不同,需要的功能也不同。我建议在实施时先从小范围开始,收集用户反馈,然后逐步迭代优化。
这套系统的另一个好处是,它为后续的功能扩展打下了基础。比如,你可以很容易地加入:
- 自动标签识别(使用图像分类模型)
- 风格迁移功能
- 批量处理队列
- 协作评审流程
- 与现有设计工具集成
技术总是在不断进步,今天Nunchaku FLUX.1 CustomV3可能明天就有新的版本。但好的系统设计应该能够适应这种变化。通过将图像生成引擎与数据管理层解耦,我们可以灵活地更换底层模型,而不会影响上层的业务流程。
如果你正在考虑将AI图像生成应用到团队工作中,希望这篇文章能给你一些实用的参考。记住,好的工具不仅要强大,更要好用、好管理。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。