ms-swift Web-UI 实战指南:用 Gradio 图形界面驱动模型训练、推理与部署 ms-swift Web-UI 实战指南用 Gradio 图形界面驱动模型训练、推理与部署【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift本文基于 SWIFTms-swift官方文档中的 Web-UI 章节结合仓库源码深入讲解swift web-ui图形化训练/推理界面的启动方式、参数体系、后台任务生命周期与运行时监控机制以及仅含推理页面的swift appSpace 部署模式。读完本文你可以完整掌握 SWIFT Web-UI 的各项能力边界、与命令行参数的映射关系以及如何从源码层面理解其命令行高级封装的设计原理。SWIFT 在支持脚本方式训练/推理的同时提供了一套基于 Gradio 的界面化入口参数支持与脚本训练完全一致。安装 SWIFT 后执行以下命令即可启动界面swift web-ui --lang zh # 或英文界面 swift web-ui --lang en启动入口与服务参数swift web-ui命令的入口定义在 swift/cli/web_ui.py其直接调用 swift/ui/app.py 中的webui_main()后者以WebUIArguments为参数类实例化SwiftWebUI管线。SwiftWebUI的服务参数由 WebUIArguments 定义默认值如下参数含义默认值server_nameWeb 服务绑定的主机名或 IP0.0.0.0server_portWeb 服务监听端口7860share是否生成可公开访问的分享链接Falselang界面语言取值{zh, en}zh从 SwiftWebUI.run 的实现看这些参数均可被环境变量覆盖优先级高于命令行参数便于在容器或远程环境中做无侵入配置SWIFT_UI_LANG覆盖--lang即中英文界面切换也可通过环境变量完成WEBUI_SHARE覆盖--shareWEBUI_SERVER覆盖--server_nameWEBUI_PORT覆盖--server_port。服务最终通过gr.Blocks构建并以inbrowserTrue方式launch默认端口 7860。页面结构七大功能 TabSwiftWebUI.run中用gr.Tabs组织了七个功能模块见 swift/ui/app.py每个模块都是一个独立的BaseUI子类LLMTrainLLM 预训练/微调PT/SFT/CPTLLMRLHF人类对齐训练DPO/CPO/KTO/ORPO 等LLMGRPO强化学习 GRPO 训练LLMInfer模型推理LLMExport模型导出合并、量化、Ollama 等LLMEval模型评测LLMSample数据采样。各子模块的源码分布在 swift/ui/ 目录下例如训练页由 swift/ui/llm_train/llm_train.py 组织包含 Model、Dataset、Runtime、Tuner、Hyper 等子组件。核心设计命令行的高级封装SWIFT Web-UI 的本质是命令行的高层封装通过界面发起的训练、部署任务会以独立进程方式通过命令行在系统中启动伪代码类似import os os.system(swift sft --model xxx --dataset xxx)这一设计带来文档列出的几项关键特性均可在源码中得到印证1. 超参数标签与命令行参数一一对应Web-UI 中每个超参数说明前都带有--xxx前缀与命令行参数保持一致。实现上BaseUI.get_argument_names 直接遍历参数 dataclass 的字段名生成--{f.name}而 update_data 装饰器在构建控件时把命令参数名追加到控件 label 之后kwargs[label] f({argument})。同时下拉框选项与默认值也是从参数类自动推导的get_choices_from_dataclass从Literal类型或choicesmetadata 提取可选值get_default_value_from_dataclass提取 dataclass 默认值列表类型默认以空格拼接与命令行传参习惯一致。这意味着界面参数与swift sft等命令的参数集天然同步界面中填写的内容最终就是原样拼接进命令行。2. 多任务并发Web-UI 可以在多卡机器上并发启动多个训练/部署任务。每个任务独立指定 GPU 与输出目录任务之间互不干扰并发执行由 Gradio 的队列控制Gradio 4.x 之前显式设置concurrency_count5见 swift/ui/app.py。3. 关闭界面后训练继续运行Web-UI 服务关闭后后台训练进程继续运行避免界面误关打断训练。从源码看任务通过 run_command_in_background_with_popen 启动非 Windows 平台使用preexec_fnos.setsid让子进程脱离会话stdout/stderr 重定向到日志文件output_dir/run.log。因此训练进程的生命周期与 Gradio 服务完全解耦。4. 界面重启后找回运行时任务重启 Web-UI 后在Runtime标签页点击Recover Runtime Tasks中文界面为找回运行时任务即可重新显示运行中的服务。对应实现是 Runtime.refresh_tasks它通过psutil.process_iter()扫描系统中所有进程筛选命令行包含swift pt/swift sft训练页或swift rlhf对齐/GRPO 页的进程并以pid/create 时间/运行时长/完整命令行的格式展示同时可自动选中指定output_dir的任务。5. 运行时日志与指标图表训练界面支持展示运行日志选中具体任务后手动点击Show Runtime Status展示运行状态日志内容通过 Runtime.wait 以 0.5 秒间隔增量读取run.log并实时渲染保留行数受环境变量MAX_LOG_LINES控制默认 100 行且自动折叠 tqdm 进度条的重复行。训练过程中还可显示指标图表。图表项按任务类型自动切换见 Runtime.get_plotSFT/PT 任务train/loss0.9 平滑、train/acc、train/learning_rate、eval/loss、eval/accDPO/CPO/SimPO 任务train/loss、train/rewards/accuracies、train/rewards/margins、train/logps/chosen、train/logps/rejected—— 即文档提到的人类对齐任务中展示 margin、logps 等关键指标KTO、ORPO、GRPO 任务分别有对应的kl、rewards、train/reward、completions/mean_length等图表。绘图逻辑见 Runtime.plot它直接读取logging_dir下的 TensorBoardevents.out文件用 matplotlib 绘制并对部分曲线做平滑处理因此图表展示依赖已安装tensorboard相关解析依赖Runtime 页还提供一键Start/Close TensorBoard按钮本质是子进程启动tensorboard --logdir logging_dir并自动打开浏览器。6. 界面暂不支持 PPO通过 Web-UI 训练不支持 PPO因为其流程更复杂需要独立的 rollout 与奖励模型进程编排。文档建议在 examples 目录下使用 shell 脚本直接运行仓库中可在 examples/train/rlhf/ 找到对应的 PPO 训练脚本与示例。Runtime 标签页的其他实用能力除上述功能外Runtime 组件swift/ui/llm_train/runtime.py还提供了展示运行命令 / 保存训练命令show_train_sh与save_cmd会把当前界面拼出的完整命令格式化为多行 sh 脚本并可保存为output_dir/train.sh方便把界面配置沉淀为可复现的脚本杀死任务Kill running task按钮对应 Runtime.kill_taskLinux 下执行pkill -9 -f output_dirWindows 下执行taskkill /f /t /pid pid因此终止的是整个后台训练进程而非仅仅是界面展示日志路径手动指定Logging dir输入框支持手动传入路径查看其他任务的日志。界面参数联动与配置缓存BaseUI.update_input_model 实现了两类联动逻辑这也是 Web-UI 相对纯脚本的便利所在选择模型后自动补全选定model后系统通过get_matched_model_meta(model)识别模型元信息自动填充model_type、template等字段若无法识别则提示手动选择。从检查点恢复全部参数若所选路径或训练记录下存在args.json会以load_data_argsTrue构造对应参数对象将历史训练的全部参数回填到界面各输入框实现一键复现上次训练配置。此外界面支持按模型保存训练记录train_record下拉框save_cache/list_cache/load_cacheswift/ui/base.py把当前参数序列化为 JSON 存入 modelscope 缓存目录下的swift-web-ui子目录按时间戳命名选择模型后可列出并一键加载历史记录。分享模式--share true及注意事项如需使用 Gradio 的 share 模式生成公网可访问的临时链接追加--share true参数即可。文档特别提醒在 DSW、Notebook 等托管环境中不要使用此参数——这类环境本身已有代理或内网穿透机制share 隧道可能冲突或失效。仅推理模式swift appSpace 部署除完整训练/推理界面外SWIFT 还支持界面推理模式即 Space 部署swift app --model model --studio_title My-Awesome-Space --stream true # 或加载 LoRA 适配器 swift app --model model --adapters adapter --studio_title My-Awesome-Space --stream true该模式启动一个仅含推理页面的应用服务启动时自动部署模型随后对外提供流式对话界面。从源码看其执行链路为swift/cli/app.py → SwiftApp.run。SwiftApp的参数类 AppArguments 同时继承WebUIArguments与DeployArguments关键参数包括参数含义默认值base_url复用已有部署服务的 API 地址如http://localhost:8000/v1设置后不再本地部署Nonestudio_title推理页面标题None默认使用模型名is_multimodal是否以多模态模式启动None时按模型自动检测Nonestream是否启用流式输出Trueverbose是否记录详细请求信息Falselang界面语言en两个值得注意的实现细节见 swift/pipelines/app/app.pyAppArguments.__post_init__中会调用find_free_port(self.server_port)自动探测可用端口避免多次部署时端口冲突SwiftApp.run中若未指定base_url会通过run_deploy(args, return_urlTrue)在上下文管理器内同步拉起模型部署对话请求经InferClient转发并发上限按推理后端区分transformers后端为 1其他后端如 vLLM为 16。推理页面的聊天组件由 swift/pipelines/app/build_ui.py 构建支持文本、图片等多模态历史流式模式下逐 delta 增量渲染。小结SWIFT Web-UI 的价值在于把swift sft/swift rlhf等命令行能力图形化参数与命令行一一对应、模型选择自动联动、任务脱离界面生命周期独立运行、日志与指标图表实时可视并支持一键导出 sh 脚本。需要多进程编排的 PPO 等复杂流程仍建议直接使用 examples 中的 shell 脚本对外提供对话服务时则可使用swift app的轻量推理模式。源码层面界面框架集中在 swift/ui/参数定义在 swift/arguments/webui_args.py 与 swift/arguments/app_args.py可结合 命令行参数文档 进一步理解每个界面字段的含义与取值。【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考