
YOLO X Layout快速部署阿里云函数计算FC部署无服务器版面分析服务你是不是经常需要处理各种文档PDF、扫描件、图片文档里面混杂着文字、表格、图片、标题想要提取里面的结构化信息手动整理简直让人崩溃。我最近就遇到了这个问题——公司有一堆历史文档需要数字化手动标注版面元素太费时间了。直到我发现了YOLO X Layout这个神器它基于YOLO模型专门做文档版面分析能自动识别文档中的文本、表格、图片、标题等11种元素类型。更棒的是我把它部署到了阿里云函数计算FC上实现了完全无服务器的版面分析服务。今天我就手把手教你如何快速部署让你也能轻松处理文档版面分析任务。1. YOLO X Layout是什么为什么选择它1.1 文档版面分析的痛点在处理文档数字化时我们经常遇到这些问题手动标注效率低一张复杂的文档页面人工标注各种元素可能要花10-15分钟格式不统一不同来源的文档格式千差万别处理起来很麻烦元素识别不准表格和文本混在一起图片和背景区分困难部署成本高传统的版面分析服务需要维护服务器成本不菲YOLO X Layout就是为解决这些问题而生的。它基于YOLO目标检测模型专门针对文档版面分析进行了优化。1.2 YOLO X Layout的核心能力这个工具能识别文档中的11种元素类型元素类型说明常见应用场景Text普通文本段落内容提取、OCR预处理Table表格区域表格数据提取、结构化Picture图片区域图片单独保存、内容分析Title标题文字文档结构分析、目录生成Section-header章节标题文档分段、导航生成List-item列表项列表内容提取Formula数学公式公式识别、单独处理Caption图注/表注图片表格描述提取Footnote脚注参考文献处理Page-header页眉文档元信息提取Page-footer页脚页码、版权信息提取1.3 为什么选择阿里云函数计算FC传统的部署方式需要自己维护服务器但阿里云函数计算FC提供了更好的选择零运维不用管服务器不用操心系统更新按量付费用多少算多少不用时不计费自动扩缩容流量大了自动扩容小了自动缩容快速部署几分钟就能上线服务接下来我就带你一步步部署这个无服务器的版面分析服务。2. 环境准备与快速部署2.1 前期准备在开始之前你需要准备阿里云账号如果没有去阿里云官网注册一个开通函数计算FC在阿里云控制台搜索函数计算按提示开通本地开发环境Python 3.8我推荐用Python 3.9代码编辑器VS Code、PyCharm都可以2.2 一键部署脚本我准备了一个完整的部署脚本你只需要修改几个配置就能用# deploy_fc.py import os import json import subprocess from pathlib import Path def setup_project(): 创建项目目录结构 project_dir Path(./yolo_x_layout_fc) project_dir.mkdir(exist_okTrue) # 创建必要的子目录 (project_dir / code).mkdir(exist_okTrue) (project_dir / models).mkdir(exist_okTrue) print(f✅ 项目目录创建完成: {project_dir.absolute()}) def create_requirements(): 创建依赖文件 requirements gradio4.0.0 opencv-python4.8.0 numpy1.24.0 onnxruntime1.16.0 pillow9.0.0 requests2.28.0 python-multipart0.0.5 with open(./yolo_x_layout_fc/code/requirements.txt, w) as f: f.write(requirements) print(✅ 依赖文件创建完成) def download_models(): 下载模型文件简化版实际需要从ModelScope下载 models_info { yolox_tiny.onnx: https://modelscope.cn/models/damo/cv_yolox-layout-detection_document/summary, yolox_l0.05_quantized.onnx: https://modelscope.cn/models/damo/cv_yolox-layout-detection_document/summary, yolox_l0.05.onnx: https://modelscope.cn/models/damo/cv_yolox-layout-detection_document/summary } print( 请手动下载模型文件) for model_name, url in models_info.items(): print(f - {model_name}: {url}) print(\n 下载后请将模型文件放到: ./yolo_x_layout_fc/models/) if __name__ __main__: print( 开始设置YOLO X Layout函数计算项目) setup_project() create_requirements() download_models() print(\n 基础设置完成接下来请下载模型文件。)运行这个脚本python deploy_fc.py2.3 模型文件准备YOLO X Layout提供了三个不同大小的模型你可以根据需求选择模型名称大小速度精度适用场景YOLOX Tiny20MB⚡⚡⚡ 最快中等实时处理、移动端YOLOX L0.05 Quantized53MB⚡⚡ 快良好平衡性能与精度YOLOX L0.05207MB⚡ 标准最高高精度要求场景下载模型文件# 进入项目目录 cd yolo_x_layout_fc # 创建模型目录 mkdir -p models # 这里需要从ModelScope下载模型文件 # 你可以访问https://modelscope.cn/models/damo/cv_yolox-layout-detection_document # 下载后放到 models/ 目录下3. 核心代码实现3.1 版面分析服务主程序创建主程序文件app.py# yolo_x_layout_fc/code/app.py import os import cv2 import numpy as np import gradio as gr from PIL import Image import onnxruntime as ort from typing import List, Dict, Tuple import json class YOLOXLayoutDetector: YOLO X Layout检测器 # 类别标签和颜色映射 CLASS_NAMES [ Caption, Footnote, Formula, List-item, Page-footer, Page-header, Picture, Section-header, Table, Text, Title ] # 为每个类别分配不同的颜色 COLORS [ (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255), (128, 0, 0), (0, 128, 0), (0, 0, 128), (128, 128, 0), (128, 0, 128) ] def __init__(self, model_path: str yolox_l0.05.onnx): 初始化检测器 self.model_path model_path self.session None self.input_name None self.output_name None # 加载模型 self.load_model() def load_model(self): 加载ONNX模型 try: # 设置ONNX Runtime执行器 providers [CPUExecutionProvider] # 加载模型 self.session ort.InferenceSession( self.model_path, providersproviders ) # 获取输入输出名称 self.input_name self.session.get_inputs()[0].name self.output_name self.session.get_outputs()[0].name print(f✅ 模型加载成功: {self.model_path}) except Exception as e: print(f❌ 模型加载失败: {e}) raise def preprocess(self, image: np.ndarray) - np.ndarray: 预处理图像 # 转换为RGB if len(image.shape) 2: image cv2.cvtColor(image, cv2.COLOR_GRAY2RGB) elif image.shape[2] 4: image cv2.cvtColor(image, cv2.COLOR_RGBA2RGB) # 调整大小到模型输入尺寸 (640x640) original_h, original_w image.shape[:2] input_size (640, 640) # 保持宽高比的resize scale min(input_size[0] / original_w, input_size[1] / original_h) new_w int(original_w * scale) new_h int(original_h * scale) resized cv2.resize(image, (new_w, new_h)) # 填充到目标尺寸 padded np.full((input_size[1], input_size[0], 3), 114, dtypenp.uint8) padded[:new_h, :new_w] resized # 归一化并转换格式 padded padded.astype(np.float32) / 255.0 padded padded.transpose(2, 0, 1) # HWC to CHW padded np.expand_dims(padded, axis0) # 添加batch维度 return padded, scale, (original_h, original_w) def postprocess(self, outputs: np.ndarray, scale: float, original_size: Tuple[int, int], conf_threshold: float 0.25) - List[Dict]: 后处理检测结果 detections [] original_h, original_w original_size # 解析输出 for detection in outputs[0]: # 检测结果格式: [x1, y1, x2, y2, conf, class_id] x1, y1, x2, y2, conf, class_id detection if conf conf_threshold: continue # 还原到原始图像坐标 x1 int(x1 / scale) y1 int(y1 / scale) x2 int(x2 / scale) y2 int(y2 / scale) # 确保坐标在图像范围内 x1 max(0, min(x1, original_w)) y1 max(0, min(y1, original_h)) x2 max(0, min(x2, original_w)) y2 max(0, min(y2, original_h)) # 计算宽度和高度 width x2 - x1 height y2 - y1 if width 0 or height 0: continue detections.append({ bbox: [x1, y1, x2, y2], confidence: float(conf), class_id: int(class_id), class_name: self.CLASS_NAMES[int(class_id)], area: width * height }) # 按置信度排序 detections.sort(keylambda x: x[confidence], reverseTrue) return detections def detect(self, image: np.ndarray, conf_threshold: float 0.25) - Tuple[np.ndarray, List[Dict]]: 执行版面分析 # 预处理 input_tensor, scale, original_size self.preprocess(image) # 推理 outputs self.session.run( [self.output_name], {self.input_name: input_tensor} ) # 后处理 detections self.postprocess(outputs, scale, original_size, conf_threshold) # 绘制检测结果 result_image self.draw_detections(image.copy(), detections) return result_image, detections def draw_detections(self, image: np.ndarray, detections: List[Dict]) - np.ndarray: 在图像上绘制检测框 for det in detections: x1, y1, x2, y2 det[bbox] class_id det[class_id] confidence det[confidence] class_name det[class_name] # 获取颜色 color self.COLORS[class_id % len(self.COLORS)] # 绘制矩形框 cv2.rectangle(image, (x1, y1), (x2, y2), color, 2) # 绘制标签背景 label f{class_name}: {confidence:.2f} (label_width, label_height), baseline cv2.getTextSize( label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1 ) cv2.rectangle( image, (x1, y1 - label_height - 10), (x1 label_width, y1), color, -1 # 填充 ) # 绘制标签文字 cv2.putText( image, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1 ) return image # 创建全局检测器实例 detector YOLOXLayoutDetector() def analyze_layout(image, conf_threshold): Gradio界面处理函数 if image is None: return None, 请上传图片 try: # 转换图像格式 if isinstance(image, str): # 文件路径 img cv2.imread(image) else: # PIL Image或numpy数组 img np.array(image) if len(img.shape) 3 and img.shape[2] 4: img cv2.cvtColor(img, cv2.COLOR_RGBA2RGB) elif len(img.shape) 3: img cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 执行检测 result_img, detections detector.detect(img, float(conf_threshold)) # 转换回RGB用于显示 result_img cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB) # 生成检测结果文本 result_text f检测到 {len(detections)} 个元素\n\n for i, det in enumerate(detections[:10]): # 只显示前10个 result_text f{i1}. {det[class_name]} (置信度: {det[confidence]:.3f})\n if len(detections) 10: result_text f\n... 还有 {len(detections) - 10} 个元素 return Image.fromarray(result_img), result_text except Exception as e: return None, f处理失败: {str(e)} def create_gradio_interface(): 创建Gradio Web界面 with gr.Blocks(titleYOLO X Layout 文档版面分析) as demo: gr.Markdown(# YOLO X Layout 文档版面分析) gr.Markdown(上传文档图片自动识别文本、表格、图片、标题等11种元素) with gr.Row(): with gr.Column(scale1): # 输入组件 image_input gr.Image( label上传文档图片, typenumpy, height300 ) conf_slider gr.Slider( minimum0.1, maximum0.9, value0.25, step0.05, label置信度阈值, info值越高检测越严格 ) analyze_btn gr.Button(分析版面, variantprimary) with gr.Column(scale1): # 输出组件 image_output gr.Image( label分析结果, height300 ) text_output gr.Textbox( label检测结果, lines10, max_lines20 ) # 示例图片 gr.Markdown(### 示例图片) gr.Examples( examples[ [example_document1.jpg, 0.25], [example_document2.jpg, 0.3], [example_document3.jpg, 0.2] ], inputs[image_input, conf_slider], outputs[image_output, text_output], fnanalyze_layout, cache_examplesFalse ) # 绑定事件 analyze_btn.click( fnanalyze_layout, inputs[image_input, conf_slider], outputs[image_output, text_output] ) return demo if __name__ __main__: # 启动Gradio服务 demo create_gradio_interface() demo.launch( server_name0.0.0.0, server_port7860, shareFalse )3.2 函数计算适配器为了让服务能在阿里云函数计算上运行我们需要创建一个适配器# yolo_x_layout_fc/code/fc_app.py import json import base64 import numpy as np from app import YOLOXLayoutDetector import cv2 # 初始化检测器冷启动时加载 detector None def init_detector(): 初始化检测器冷启动处理 global detector if detector is None: # 根据内存选择模型 import os model_dir /mnt/auto/models # 检查模型文件 model_files os.listdir(model_dir) if os.path.exists(model_dir) else [] if yolox_tiny.onnx in model_files: model_path f{model_dir}/yolox_tiny.onnx elif yolox_l0.05_quantized.onnx in model_files: model_path f{model_dir}/yolox_l0.05_quantized.onnx else: model_path f{model_dir}/yolox_l0.05.onnx detector YOLOXLayoutDetector(model_path) return detector def handler(event, context): 函数计算入口函数 try: # 初始化检测器 detector init_detector() # 解析请求 if body not in event: return { statusCode: 400, body: json.dumps({error: 缺少请求体}) } # 解析请求体 body json.loads(event[body]) # 获取图像数据 if image in body: # Base64编码的图像 image_data base64.b64decode(body[image]) nparr np.frombuffer(image_data, np.uint8) image cv2.imdecode(nparr, cv2.IMREAD_COLOR) elif image_url in body: # 图片URL import requests from io import BytesIO response requests.get(body[image_url]) image cv2.imdecode( np.frombuffer(response.content, np.uint8), cv2.IMREAD_COLOR ) else: return { statusCode: 400, body: json.dumps({error: 请提供image或image_url参数}) } # 获取置信度阈值 conf_threshold body.get(conf_threshold, 0.25) # 执行检测 result_img, detections detector.detect(image, conf_threshold) # 准备响应 response_data { detections: detections, count: len(detections), classes_found: list(set([d[class_name] for d in detections])) } # 如果需要返回图像 if body.get(return_image, False): _, buffer cv2.imencode(.jpg, result_img) image_base64 base64.b64encode(buffer).decode(utf-8) response_data[image] image_base64 return { statusCode: 200, body: json.dumps(response_data, ensure_asciiFalse), headers: { Content-Type: application/json } } except Exception as e: return { statusCode: 500, body: json.dumps({error: str(e)}) } # 本地测试函数 def test_local(): 本地测试函数 # 模拟函数计算事件 with open(test_document.jpg, rb) as f: image_base64 base64.b64encode(f.read()).decode(utf-8) event { body: json.dumps({ image: image_base64, conf_threshold: 0.25, return_image: True }) } result handler(event, None) print(测试结果:, json.dumps(json.loads(result[body]), indent2)) if __name__ __main__: test_local()4. 部署到阿里云函数计算4.1 创建函数计算服务现在我们来部署到阿里云函数计算# 安装阿里云CLI工具如果还没安装 pip install aliyun-python-sdk-core aliyun-python-sdk-fc # 创建部署配置文件 cat template.yml EOF ROSTemplateFormatVersion: 2015-09-01 Transform: Aliyun::Serverless-2018-04-03 Resources: yolo-layout-service: Type: Aliyun::Serverless::Service Properties: Description: YOLO X Layout文档版面分析服务 InternetAccess: true yolo-layout-function: Type: Aliyun::Serverless::Function Properties: Handler: fc_app.handler Runtime: python3.9 CodeUri: ./code Timeout: 60 MemorySize: 3072 EnvironmentVariables: MODEL_DIR: /mnt/auto/models InstanceConcurrency: 10 Events: http-trigger: Type: HTTP Properties: AuthType: ANONYMOUS Methods: [POST, GET] EOF # 创建NAS存储配置用于存储模型文件 cat nas.yml EOF ROSTemplateFormatVersion: 2015-09-01 Transform: Aliyun::Serverless-2018-04-03 Resources: layout-models-nas: Type: Aliyun::Serverless::Nas Properties: Description: YOLO模型文件存储 StorageType: Performance ProtocolType: NFS ZoneId: cn-hangzhou-h EOF4.2 一键部署脚本创建部署脚本deploy.sh#!/bin/bash # deploy.sh - 一键部署到阿里云函数计算 set -e echo 开始部署YOLO X Layout到阿里云函数计算... # 检查阿里云CLI配置 if ! command -v fun /dev/null; then echo ❌ 请先安装阿里云Fun工具: npm install alicloud/fun -g exit 1 fi # 配置阿里云访问 echo 请配置阿里云访问密钥 read -p AccessKey ID: ACCESS_KEY_ID read -s -p AccessKey Secret: ACCESS_KEY_SECRET echo export ALIBABA_CLOUD_ACCESS_KEY_ID$ACCESS_KEY_ID export ALIBABA_CLOUD_ACCESS_KEY_SECRET$ACCESS_KEY_SECRET # 创建部署包 echo 创建部署包... mkdir -p deploy_package cp -r code/* deploy_package/ cp template.yml deploy_package/ # 压缩代码排除大文件 cd deploy_package zip -r ../function_code.zip . -x *.onnx *.jpg *.png cd .. # 使用Fun工具部署 echo ☁️ 部署到函数计算... fun deploy --template template.yml --assume-yes # 配置NAS存储用于模型文件 echo 配置NAS存储... if [ ! -f nas_mounted ]; then # 这里需要手动在阿里云控制台配置NAS echo 请在阿里云控制台完成以下操作 echo 1. 创建NAS文件系统 echo 2. 挂载到函数计算的 /mnt/auto/models 目录 echo 3. 将模型文件上传到NAS echo echo 模型文件路径 echo - yolox_tiny.onnx echo - yolox_l0.05_quantized.onnx echo - yolox_l0.05.onnx touch nas_mounted fi echo echo 部署完成 echo echo 服务信息 echo - 服务名称: yolo-layout-service echo - 函数名称: yolo-layout-function echo - 访问方式: HTTP触发器 echo echo 获取访问地址 echo fun info4.3 测试部署的服务部署完成后我们可以测试服务# test_service.py import requests import json import base64 import cv2 def test_http_endpoint(): 测试HTTP端点 # 读取测试图片 with open(test_document.jpg, rb) as f: image_data base64.b64encode(f.read()).decode(utf-8) # 准备请求数据 payload { image: image_data, conf_threshold: 0.25, return_image: True } # 发送请求替换为你的实际端点 endpoint https://your-service-id.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/yolo-layout-service/yolo-layout-function/ try: response requests.post( endpoint, jsonpayload, timeout30 ) if response.status_code 200: result response.json() print(f✅ 检测成功) print(f 检测到 {result[count]} 个元素) print(f 包含类别: {, .join(result[classes_found])}) # 显示前5个检测结果 print(\n 检测结果详情) for i, det in enumerate(result[detections][:5]): print(f {i1}. {det[class_name]} - 置信度: {det[confidence]:.3f}) # 保存结果图片 if image in result: import base64 from PIL import Image import io img_data base64.b64decode(result[image]) with open(result_with_boxes.jpg, wb) as f: f.write(img_data) print(f\n 结果图片已保存: result_with_boxes.jpg) else: print(f❌ 请求失败: {response.status_code}) print(f 错误信息: {response.text}) except Exception as e: print(f❌ 测试失败: {str(e)}) def test_batch_processing(): 测试批量处理 documents [ document1.jpg, document2.jpg, document3.jpg ] results [] for doc in documents: print(f处理: {doc}) try: with open(doc, rb) as f: image_data base64.b64encode(f.read()).decode(utf-8) payload { image: image_data, conf_threshold: 0.25 } # 发送请求 endpoint 你的服务端点 response requests.post(endpoint, jsonpayload, timeout30) if response.status_code 200: result response.json() results.append({ document: doc, count: result[count], classes: result[classes_found] }) print(f ✅ 成功检测到 {result[count]} 个元素) else: print(f ❌ 处理失败) except Exception as e: print(f ❌ 错误: {str(e)}) # 输出统计信息 print(\n 批量处理统计) total_elements sum(r[count] for r in results) print(f 总文档数: {len(results)}) print(f 总元素数: {total_elements}) print(f 平均每文档: {total_elements/len(results):.1f} 个元素) if __name__ __main__: print( 开始测试YOLO X Layout服务) print( * 50) # 测试单个文档 test_http_endpoint() print(\n * 50) # 测试批量处理 # test_batch_processing()5. 实际应用场景与优化建议5.1 典型应用场景YOLO X Layout在实际工作中有很多应用场景1文档数字化归档def digitize_document(document_path): 文档数字化处理流程 # 1. 版面分析 layout_result analyze_layout(document_path) # 2. 按区域提取内容 for element in layout_result[detections]: if element[class_name] Text: # 提取文本区域进行OCR text_content extract_text_from_region(document_path, element[bbox]) save_text_content(text_content, element) elif element[class_name] Table: # 提取表格区域 table_data extract_table_from_region(document_path, element[bbox]) save_table_data(table_data, element) elif element[class_name] Picture: # 保存图片 save_image_region(document_path, element[bbox], element) # 3. 生成结构化数据 structured_data create_structured_output(layout_result) return structured_data场景2智能文档审核def document_quality_check(document_path): 文档质量自动审核 layout_result analyze_layout(document_path) issues [] # 检查必要元素 required_elements [Title, Text] for elem in required_elements: if elem not in [d[class_name] for d in layout_result[detections]]: issues.append(f缺少必要元素: {elem}) # 检查表格完整性 tables [d for d in layout_result[detections] if d[class_name] Table] if len(tables) 0: for table in tables: # 检查表格是否有标题 table_bbox table[bbox] # 查找附近的Caption has_caption check_nearby_caption(table_bbox, layout_result) if not has_caption: issues.append(表格缺少标题说明) # 检查图片质量 pictures [d for d in layout_result[detections] if d[class_name] Picture] for pic in pictures: if pic[area] 10000: # 面积太小 issues.append(图片尺寸过小可能影响清晰度) return { total_elements: len(layout_result[detections]), issues: issues, score: calculate_quality_score(layout_result) }5.2 性能优化建议优化1选择合适的模型def select_model_based_on_need(requirements): 根据需求选择模型 if requirements[realtime]: # 实时处理选择小模型 return yolox_tiny.onnx elif requirements[high_accuracy]: # 高精度要求选择大模型 return yolox_l0.05.onnx else: # 平衡性能选择量化模型 return yolox_l0.05_quantized.onnx优化2批量处理优化def batch_process_documents(documents, batch_size5): 批量处理文档优化性能 results [] for i in range(0, len(documents), batch_size): batch documents[i:ibatch_size] # 并行处理 with ThreadPoolExecutor(max_workersbatch_size) as executor: futures [] for doc in batch: future executor.submit(process_single_document, doc) futures.append(future) # 收集结果 for future in futures: try: result future.result(timeout30) results.append(result) except Exception as e: print(f处理失败: {str(e)}) return results优化3缓存策略from functools import lru_cache import hashlib lru_cache(maxsize100) def analyze_layout_cached(image_hash, conf_threshold): 带缓存的版面分析 # 根据image_hash获取实际图像数据 image_data get_image_from_hash(image_hash) return analyze_layout(image_data, conf_threshold) def get_image_hash(image_data): 计算图像哈希值用于缓存 return hashlib.md5(image_data.tobytes()).hexdigest()5.3 成本控制建议使用阿里云函数计算时可以通过以下方式控制成本设置并发限制避免突发流量导致费用激增使用预留实例对于稳定流量使用预留实例更划算优化内存配置根据实际使用调整内存大小设置超时时间避免长时间运行的任务使用异步调用对于非实时任务使用异步调用6. 总结通过本文的教程你已经掌握了如何将YOLO X Layout部署到阿里云函数计算FC构建了一个完全无服务器的文档版面分析服务。6.1 关键收获技术选型合理YOLO X Layout专门针对文档版面分析优化识别准确率高部署方案先进使用阿里云函数计算FC实现了零运维、按量付费的服务实用性强提供了完整的代码示例和部署脚本开箱即用扩展性好架构设计支持批量处理、性能优化和成本控制6.2 下一步建议如果你想让这个服务更加强大可以考虑集成OCR服务将版面分析与OCR结合实现端到端的文档理解添加文档分类根据版面特征自动分类文档类型构建工作流将版面分析嵌入到更大的文档处理流程中优化用户体验提供更友好的Web界面和API文档6.3 实际价值这个部署方案的实际价值在于降低技术门槛不需要深度学习专业知识就能使用先进的版面分析技术节省成本按需付费不用时为0成本提高效率自动化的版面分析比人工快几十倍易于集成标准的HTTP API可以轻松集成到现有系统中现在你可以开始使用这个无服务器的版面分析服务处理你的文档数字化需求了。如果在部署过程中遇到问题或者有新的使用场景欢迎随时交流讨论。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。