Z-Image-Turbo-rinaiqiao-huiyewunv实战教程:API封装(FastAPI)+WebUI双模式支持架构设计
Z-Image-Turbo-rinaiqiao-huiyewunv实战教程API封装FastAPIWebUI双模式支持架构设计1. 引言从单机工具到服务化架构如果你已经体验过Z-Image-Turbo-rinaiqiao-huiyewunv这个二次元人物绘图工具可能会发现一个问题它确实好用但只能在本地浏览器里操作。如果你想把它集成到自己的应用里或者让团队其他成员也能调用就得想别的办法了。这就是我们今天要解决的问题。我将带你把这个单机工具升级成双模式支持的架构——既保留原来的WebUI界面又增加一个FastAPI封装的接口服务。这样你就能继续用WebUI像以前一样在浏览器里点点鼠标就能生成图片通过API调用在自己的代码里直接调用绘图功能集成到其他系统团队共享使用部署在服务器上大家都能访问整个升级过程并不复杂我会手把手带你完成。即使你之前没怎么接触过FastAPI跟着教程走也能搞定。2. 架构设计思路为什么选择双模式在开始写代码之前我们先搞清楚为什么要这样设计。理解了这个后面的实现就顺理成章了。2.1 单机工具的局限性原来的工具是基于Streamlit的Web应用它有几个天生的限制只能通过浏览器交互每次生成图片都要打开网页、填写参数、点击按钮难以集成如果你想在后台自动批量生成图片或者把绘图功能嵌入到其他系统里几乎不可能并发能力弱Streamlit本身不适合处理高并发请求多人同时使用体验会变差2.2 双模式架构的优势我们设计的双模式架构解决了这些问题原始单机工具 ↓ 核心绘图引擎Z-Image Turbo模型 ├── WebUI模式Streamlit→ 保留原有交互体验 └── API模式FastAPI→ 提供编程接口这样设计的好处兼容性老用户继续用WebUI新需求通过API满足灵活性你可以根据场景选择最合适的使用方式可扩展性未来想加新功能只需要在核心引擎里实现两个模式都能受益2.3 技术选型为什么是FastAPI你可能想问为什么选FastAPI而不是Flask或者其他框架我选择FastAPI主要基于这几个考虑性能好基于Starlette和Pydantic速度很快适合API服务类型提示Python的类型提示能让代码更健壮减少错误自动文档Swagger UI和ReDoc自动生成不用自己写API文档异步支持原生支持async/await处理并发请求更高效学习曲线平缓如果你会用Python上手FastAPI很快最重要的是FastAPI和Streamlit可以很好地共存它们都是Python生态里的优秀工具。3. 环境准备与项目结构在开始写代码之前我们需要准备好开发环境并规划好项目结构。3.1 环境依赖确保你已经安装了Z-Image-Turbo-rinaiqiao-huiyewunv的基础环境。如果没有先按照原来的教程安装好。然后安装FastAPI相关的依赖# 基础依赖 pip install fastapi uvicorn # 可选但推荐的依赖 pip install python-multipart # 处理文件上传 pip install pydantic-settings # 配置管理 pip install loguru # 更好的日志 # 开发工具 pip install httpx # 测试API用3.2 项目结构规划这是我们的项目目录结构z-image-turbo-dual-mode/ ├── core/ # 核心绘图引擎 │ ├── __init__.py │ ├── engine.py # 绘图核心逻辑 │ └── config.py # 配置管理 ├── api/ # API服务 │ ├── __init__.py │ ├── main.py # FastAPI主应用 │ ├── routers/ # 路由模块 │ │ ├── __init__.py │ │ └── generate.py # 生成图片的路由 │ └── schemas.py # 数据模型定义 ├── webui/ # WebUI界面 │ ├── __init__.py │ └── app.py # Streamlit应用 ├── shared/ # 共享模块 │ ├── __init__.py │ └── utils.py # 工具函数 ├── weights/ # 模型权重文件 │ └── rinaiqiao.safetensors ├── requirements.txt # 依赖列表 ├── docker-compose.yml # Docker编排可选 └── README.md # 项目说明这样的结构清晰明了core/放核心绘图逻辑两个模式都共用api/和webui/分别对应两种使用方式shared/放一些公共的工具函数配置文件、权重文件单独存放4. 核心绘图引擎重构原来的绘图逻辑是直接写在Streamlit应用里的我们需要把它抽出来做成独立的模块。4.1 创建绘图引擎类在core/engine.py中我们创建一个DrawingEngine类import torch import gc from diffusers import StableDiffusionXLPipeline from safetensors.torch import load_file import logging logger logging.getLogger(__name__) class DrawingEngine: 二次元人物绘图引擎核心类 def __init__(self, model_path: str, weight_path: str): 初始化绘图引擎 Args: model_path: Z-Image Turbo模型路径 weight_path: 辉夜大小姐微调权重路径 self.model_path model_path self.weight_path weight_path self.pipeline None self.device cuda if torch.cuda.is_available() else cpu # 默认参数针对Turbo模型优化 self.default_steps 20 self.default_cfg_scale 2.0 self.default_width 1024 self.default_height 1024 logger.info(f绘图引擎初始化设备: {self.device}) def load_model(self): 加载模型和权重 try: logger.info(开始加载Z-Image Turbo模型...) # 加载基础模型 self.pipeline StableDiffusionXLPipeline.from_pretrained( self.model_path, torch_dtypetorch.bfloat16, use_safetensorsTrue ) # 启用CPU卸载节省显存 self.pipeline.enable_model_cpu_offload() # 加载微调权重 self._load_lora_weights() # 优化CUDA内存分配 if self.device cuda: torch.cuda.set_per_process_memory_fraction(0.9) torch.cuda.empty_cache() logger.info(模型加载完成) return True except Exception as e: logger.error(f模型加载失败: {e}) return False def _load_lora_weights(self): 加载LoRA微调权重 try: logger.info(开始注入辉夜大小姐微调权重...) # 加载权重文件 lora_weights load_file(self.weight_path) # 清理权重键名移除transformer./model.前缀 cleaned_weights {} for key, value in lora_weights.items(): # 移除常见的前缀 new_key key.replace(transformer., ).replace(model., ) cleaned_weights[new_key] value # 加载到pipeline self.pipeline.load_lora_weights( pretrained_model_name_or_path_or_dictcleaned_weights, adapter_namerinaiqiao ) # 设置适配器 self.pipeline.set_adapters([rinaiqiao]) logger.info(权重注入成功) except Exception as e: logger.error(f权重加载失败: {e}) # 即使权重加载失败也继续使用基础模型 logger.warning(将使用基础模型继续运行) def generate_image( self, prompt: str, negative_prompt: str None, steps: int None, cfg_scale: float None, width: int None, height: int None, seed: int None ): 生成图片 Args: prompt: 正面提示词 negative_prompt: 负面提示词 steps: 生成步数 cfg_scale: CFG缩放系数 width: 图片宽度 height: 图片高度 seed: 随机种子 Returns: PIL.Image对象或错误信息 # 使用默认值或传入值 steps steps or self.default_steps cfg_scale cfg_scale or self.default_cfg_scale width width or self.default_width height height or self.default_height # 设置负面提示词默认值 if negative_prompt is None: negative_prompt ( low quality, worst quality, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry ) # 设置随机种子 if seed is not None: generator torch.Generator(deviceself.device).manual_seed(seed) else: generator None try: logger.info(f开始生成图片: {prompt[:50]}...) # 清理内存 gc.collect() if self.device cuda: torch.cuda.empty_cache() # 生成图片 image self.pipeline( promptprompt, negative_promptnegative_prompt, num_inference_stepssteps, guidance_scalecfg_scale, widthwidth, heightheight, generatorgenerator ).images[0] logger.info(图片生成成功) return image except Exception as e: logger.error(f图片生成失败: {e}) raise def cleanup(self): 清理资源 if self.pipeline: del self.pipeline gc.collect() if self.device cuda: torch.cuda.empty_cache() logger.info(资源清理完成)这个类做了几件重要的事封装绘图逻辑把原来的代码整理成类的方法错误处理加了try-except避免程序崩溃资源管理生成前后自动清理内存配置分离参数可以灵活设置4.2 配置管理在core/config.py中我们管理配置from pydantic_settings import BaseSettings from typing import Optional class Settings(BaseSettings): 应用配置 # 模型路径配置 model_path: str stabilityai/sdxl-turbo weight_path: str ./weights/rinaiqiao.safetensors # API配置 api_host: str 0.0.0.0 api_port: int 8000 api_reload: bool True # WebUI配置 webui_host: str 0.0.0.0 webui_port: int 8501 # 生成参数默认值 default_steps: int 20 default_cfg_scale: float 2.0 default_width: int 1024 default_height: int 1024 # 日志配置 log_level: str INFO class Config: env_file .env settings Settings()用Pydantic管理配置的好处是类型检查确保配置值类型正确环境变量支持可以从.env文件或系统环境变量读取默认值有合理的默认值开箱即用5. FastAPI接口服务实现现在我们来创建API服务。这是整个架构的关键部分。5.1 定义数据模型在api/schemas.py中定义API的请求和响应模型from pydantic import BaseModel, Field from typing import Optional class GenerateRequest(BaseModel): 生成图片的请求模型 prompt: str Field( ..., description正面提示词描述你想生成的画面, example辉夜大小姐红色瞳孔黑色长发校服教室背景二次元风格高清细节丰富 ) negative_prompt: Optional[str] Field( None, description负面提示词描述你不想要的内容, examplelow quality, worst quality, bad anatomy ) steps: Optional[int] Field( 20, description生成步数Turbo模型推荐20步左右, ge4, le30 ) cfg_scale: Optional[float] Field( 2.0, descriptionCFG缩放系数控制提示词约束强度, ge1.0, le5.0 ) width: Optional[int] Field( 1024, description图片宽度, ge512, le2048 ) height: Optional[int] Field( 1024, description图片高度, ge512, le2048 ) seed: Optional[int] Field( None, description随机种子用于复现相同结果 ) class GenerateResponse(BaseModel): 生成图片的响应模型 success: bool Field(..., description是否成功) message: str Field(..., description结果消息) image_url: Optional[str] Field(None, description图片访问URL) image_base64: Optional[str] Field(None, descriptionBase64编码的图片数据) seed: Optional[int] Field(None, description使用的随机种子) class HealthResponse(BaseModel): 健康检查响应 status: str Field(..., description服务状态) model_loaded: bool Field(..., description模型是否已加载) device: str Field(..., description运行设备)Pydantic模型会自动验证输入数据是否合法生成API文档提供清晰的错误信息5.2 实现API路由在api/routers/generate.py中实现生成图片的接口from fastapi import APIRouter, HTTPException, BackgroundTasks from fastapi.responses import JSONResponse, FileResponse import base64 from io import BytesIO import uuid import os from datetime import datetime from api.schemas import GenerateRequest, GenerateResponse from core.engine import DrawingEngine from core.config import settings router APIRouter(prefix/api/v1, tags[生成]) # 全局绘图引擎实例 engine None def get_engine(): 获取或初始化绘图引擎 global engine if engine is None: engine DrawingEngine( model_pathsettings.model_path, weight_pathsettings.weight_path ) if not engine.load_model(): raise RuntimeError(模型加载失败) return engine router.get(/health, response_modelHealthResponse) async def health_check(): 健康检查接口 try: engine get_engine() return { status: healthy, model_loaded: True, device: engine.device } except Exception as e: return { status: unhealthy, model_loaded: False, device: unknown } router.post(/generate, response_modelGenerateResponse) async def generate_image(request: GenerateRequest): 生成二次元人物图片 根据提示词生成辉夜大小姐风格的二次元图片 try: # 获取绘图引擎 engine get_engine() # 生成图片 image engine.generate_image( promptrequest.prompt, negative_promptrequest.negative_prompt, stepsrequest.steps, cfg_scalerequest.cfg_scale, widthrequest.width, heightrequest.height, seedrequest.seed ) # 生成唯一文件名 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) filename fgenerated_{timestamp}_{uuid.uuid4().hex[:8]}.png # 保存图片到临时目录 temp_dir temp_images os.makedirs(temp_dir, exist_okTrue) filepath os.path.join(temp_dir, filename) image.save(filepath, formatPNG) # 转换为Base64可选用于直接返回 buffered BytesIO() image.save(buffered, formatPNG) img_str base64.b64encode(buffered.getvalue()).decode() # 返回结果 return GenerateResponse( successTrue, message图片生成成功, image_urlf/api/v1/image/{filename}, image_base64fdata:image/png;base64,{img_str}, seedrequest.seed ) except Exception as e: raise HTTPException( status_code500, detailf图片生成失败: {str(e)} ) router.get(/image/{filename}) async def get_image(filename: str): 获取生成的图片 filepath os.path.join(temp_images, filename) if not os.path.exists(filepath): raise HTTPException(status_code404, detail图片不存在) return FileResponse( filepath, media_typeimage/png, filenamefilename ) def cleanup_temp_files(): 清理临时图片文件可以定时任务调用 import glob import time temp_dir temp_images if os.path.exists(temp_dir): # 删除超过1小时的文件 for filepath in glob.glob(os.path.join(temp_dir, *.png)): if os.path.getmtime(filepath) time.time() - 3600: os.remove(filepath)这个路由模块提供了三个接口/health健康检查查看服务状态/generate生成图片支持所有参数/image/{filename}获取生成的图片文件5.3 创建FastAPI主应用在api/main.py中创建FastAPI应用from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import uvicorn import logging from api.routers import generate from core.config import settings # 配置日志 logging.basicConfig( levelsettings.log_level, format%(asctime)s - %(name)s - %(levelname)s - %(message)s ) logger logging.getLogger(__name__) # 创建FastAPI应用 app FastAPI( titleZ-Image Turbo API, description辉夜大小姐二次元人物绘图API服务, version1.0.0, docs_url/docs, redoc_url/redoc ) # 添加CORS中间件允许跨域请求 app.add_middleware( CORSMiddleware, allow_origins[*], # 生产环境应该限制域名 allow_credentialsTrue, allow_methods[*], allow_headers[*], ) # 注册路由 app.include_router(generate.router) app.on_event(startup) async def startup_event(): 应用启动时执行 logger.info(Z-Image Turbo API服务启动中...) logger.info(f模型路径: {settings.model_path}) logger.info(f权重路径: {settings.weight_path}) app.on_event(shutdown) async def shutdown_event(): 应用关闭时执行 logger.info(清理资源...) # 这里可以添加资源清理代码 app.get(/) async def root(): 根路径 return { message: 欢迎使用Z-Image Turbo API服务, docs: /docs, redoc: /redoc, health_check: /api/v1/health } if __name__ __main__: uvicorn.run( api.main:app, hostsettings.api_host, portsettings.api_port, reloadsettings.api_reload )6. WebUI界面升级原来的Streamlit界面我们保留但要做一些调整让它能调用API服务。6.1 创建新的WebUI应用在webui/app.py中import streamlit as st import requests import base64 from io import BytesIO from PIL import Image import time # 页面配置 st.set_page_config( page_titleZ-Image Turbo 绘图工具, page_icon, layoutwide, initial_sidebar_stateexpanded ) # API配置 API_BASE_URL http://localhost:8000 # 默认地址可以根据需要修改 # 初始化session state if api_available not in st.session_state: st.session_state.api_available False if generated_images not in st.session_state: st.session_state.generated_images [] def check_api_health(): 检查API服务是否可用 try: response requests.get(f{API_BASE_URL}/api/v1/health, timeout5) if response.status_code 200: data response.json() st.session_state.api_available data.get(model_loaded, False) return data else: st.session_state.api_available False return None except: st.session_state.api_available False return None def generate_image_via_api(prompt, negative_prompt, steps, cfg_scale, width, height, seed): 通过API生成图片 try: # 构造请求数据 data { prompt: prompt, negative_prompt: negative_prompt, steps: steps, cfg_scale: cfg_scale, width: width, height: height, seed: seed if seed ! -1 else None } # 移除None值 data {k: v for k, v in data.items() if v is not None} # 发送请求 response requests.post( f{API_BASE_URL}/api/v1/generate, jsondata, timeout300 # 5分钟超时 ) if response.status_code 200: result response.json() if result.get(success): return result else: st.error(f生成失败: {result.get(message)}) return None else: st.error(fAPI请求失败: {response.status_code}) return None except requests.exceptions.Timeout: st.error(请求超时请稍后重试) return None except Exception as e: st.error(f生成过程中出错: {str(e)}) return None # 页面标题 st.title( Z-Image Turbo 二次元人物绘图工具) st.markdown(---) # 检查API状态 with st.spinner(检查API服务状态...): health_info check_api_health() # 侧边栏 - 模式选择 with st.sidebar: st.header(⚙️ 设置) mode st.radio( 选择运行模式, [API模式, 本地模式], helpAPI模式调用后端服务本地模式直接运行需要GPU ) if mode API模式: st.info(使用API服务生成图片) api_url st.text_input( API地址, valueAPI_BASE_URL, helpFastAPI服务的地址 ) API_BASE_URL api_url # 显示API状态 if health_info: st.success(✅ API服务可用) st.info(f设备: {health_info.get(device, 未知)}) else: st.error(❌ API服务不可用) st.warning(请确保API服务已启动) else: st.info(本地模式暂未实现请使用API模式) st.stop() # 主界面 - 参数配置 col1, col2 st.columns([1, 2]) with col1: st.header( 生成参数) # 提示词输入 default_prompt ( 辉夜大小姐红色瞳孔黑色长发校服教室背景 二次元风格高清细节丰富动漫插画 ) prompt st.text_area( 正面提示词, valuedefault_prompt, height150, help描述你想生成的画面 ) default_negative ( low quality, worst quality, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry ) negative_prompt st.text_area( 负面提示词, valuedefault_negative, height100, help描述你不想要的内容 ) # 参数调节 col1_1, col1_2 st.columns(2) with col1_1: steps st.slider( 生成步数, min_value4, max_value30, value20, helpTurbo模型推荐20步左右 ) width st.selectbox( 图片宽度, options[512, 768, 1024, 1280, 1536, 2048], index2, help选择图片宽度 ) with col1_2: cfg_scale st.slider( CFG Scale, min_value1.0, max_value5.0, value2.0, step0.5, help控制提示词约束强度 ) height st.selectbox( 图片高度, options[512, 768, 1024, 1280, 1536, 2048], index2, help选择图片高度 ) # 随机种子 seed st.number_input( 随机种子, value-1, min_value-1, help-1表示随机生成其他值可复现相同结果 ) # 生成按钮 generate_button st.button( 生成人物写真, typeprimary, use_container_widthTrue ) with col2: st.header(️ 生成结果) if generate_button and prompt: if not st.session_state.api_available: st.error(API服务不可用请检查服务状态) else: with st.spinner(画师正在奋笔疾书中...): # 调用API生成图片 result generate_image_via_api( prompt, negative_prompt, steps, cfg_scale, width, height, seed ) if result: # 显示图片 if result.get(image_base64): # 从Base64解码图片 image_data result[image_base64].split(,)[1] image_bytes base64.b64decode(image_data) image Image.open(BytesIO(image_bytes)) # 显示图片 st.image(image, captionprompt[:50] ...) # 保存到session state st.session_state.generated_images.append({ image: image, prompt: prompt, seed: result.get(seed), time: time.strftime(%Y-%m-%d %H:%M:%S) }) # 显示成功信息 st.success(✅ 图片生成成功) # 显示图片信息 st.info(f**图片信息**\n\n f- 尺寸: {width}×{height}\n f- 步数: {steps}\n f- CFG Scale: {cfg_scale}\n f- 种子: {result.get(seed, 随机)}) # 下载按钮 buf BytesIO() image.save(buf, formatPNG) byte_im buf.getvalue() st.download_button( label 下载图片, databyte_im, file_namefgenerated_{int(time.time())}.png, mimeimage/png, use_container_widthTrue ) # 显示历史记录 if st.session_state.generated_images: st.markdown(---) st.subheader( 生成历史) for i, item in enumerate(reversed(st.session_state.generated_images[-5:])): with st.expander(f图片 {i1} - {item[time]}): st.image(item[image], use_column_widthTrue) st.caption(f提示词: {item[prompt][:100]}...) if item[seed]: st.caption(f种子: {item[seed]}) # 页脚 st.markdown(---) st.caption( 提示API模式需要先启动FastAPI服务本地模式需要GPU支持)这个新的WebUI界面支持双模式可以选择API模式或本地模式更好的用户体验有历史记录、图片下载、状态提示与API集成通过HTTP请求调用后端服务7. 双模式部署与使用现在我们已经有了完整的双模式架构接下来看看怎么部署和使用。7.1 启动API服务首先启动FastAPI服务# 方式1直接运行 cd z-image-turbo-dual-mode python -m api.main # 方式2使用uvicorn uvicorn api.main:app --host 0.0.0.0 --port 8000 --reload启动后你可以访问http://localhost:8000- API主页http://localhost:8000/docs- 交互式API文档http://localhost:8000/redoc- 另一种API文档7.2 启动WebUI服务然后启动Streamlit WebUIcd z-image-turbo-dual-mode streamlit run webui/app.py访问http://localhost:8501就能看到界面了。7.3 通过API调用除了用WebUI你还可以直接调用APIimport requests import base64 from PIL import Image from io import BytesIO # API地址 API_URL http://localhost:8000 # 1. 检查服务状态 response requests.get(f{API_URL}/api/v1/health) print(服务状态:, response.json()) # 2. 生成图片 generate_data { prompt: 辉夜大小姐红色瞳孔黑色长发校服教室背景二次元风格, steps: 20, cfg_scale: 2.0, width: 1024, height: 1024, seed: 42 # 固定种子可以复现相同结果 } response requests.post( f{API_URL}/api/v1/generate, jsongenerate_data ) if response.status_code 200: result response.json() if result[success]: # 从Base64解码图片 image_data result[image_base64].split(,)[1] image_bytes base64.b64decode(image_data) # 保存图片 with open(generated_image.png, wb) as f: f.write(image_bytes) print(图片生成成功已保存为 generated_image.png) # 或者直接使用PIL打开 image Image.open(BytesIO(image_bytes)) image.show() else: print(生成失败:, response.text)7.4 使用Docker部署可选如果你想要更简单的部署方式可以创建Docker配置Dockerfile:FROM python:3.10-slim WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ git \ gcc \ g \ rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 创建非root用户 RUN useradd -m -u 1000 appuser chown -R appuser:appuser /app USER appuser # 暴露端口 EXPOSE 8000 8501 # 启动命令 CMD [sh, -c, uvicorn api.main:app --host 0.0.0.0 --port 8000 streamlit run webui/app.py --server.port 8501 --server.address 0.0.0.0]docker-compose.yml:version: 3.8 services: z-image-turbo: build: . ports: - 8000:8000 # API服务 - 8501:8501 # WebUI服务 volumes: - ./weights:/app/weights # 挂载权重文件 - ./temp_images:/app/temp_images # 挂载临时图片 environment: - MODEL_PATHstabilityai/sdxl-turbo - WEIGHT_PATH/app/weights/rinaiqiao.safetensors deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]然后一键启动docker-compose up -d8. 总结与进阶建议8.1 项目总结通过这个教程我们成功将单机的Z-Image-Turbo工具升级为双模式架构核心引擎重构把绘图逻辑封装成独立的类便于复用API服务实现用FastAPI提供了完整的RESTful接口WebUI升级Streamlit界面现在可以调用API体验更好双模式支持既保留了原有的交互方式又增加了编程接口这个架构的好处很明显灵活性你可以通过WebUI快速测试通过API集成到其他系统可扩展性未来加新功能只需要在核心引擎实现易维护代码结构清晰模块化设计8.2 性能优化建议如果你在实际使用中发现性能问题可以尝试这些优化模型缓存第一次加载模型后缓存起来避免重复加载请求队列处理并发请求时使用队列避免显存溢出图片压缩返回的图片可以适当压缩减少网络传输异步生成使用FastAPI的异步特性处理长时间任务8.3 安全考虑在生产环境使用时需要考虑安全问题API认证添加API密钥验证请求限制限制单个用户的请求频率输入验证严格验证用户输入的提示词文件清理定期清理临时图片文件8.4 下一步可以做什么这个双模式架构还有很多可以扩展的地方批量生成添加批量生成图片的接口风格混合支持多个LoRA权重的混合使用参数预设保存常用的参数组合用户管理添加用户系统保存生成历史模型管理支持动态加载不同的模型和权重最重要的是现在你有了一个坚实的基础架构可以基于这个架构快速开发新功能。无论是想集成到自己的产品里还是想搭建一个团队共享的绘图服务这个双模式架构都能很好地支持。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2415379.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!