3 lines
22 KiB
JavaScript
3 lines
22 KiB
JavaScript
import{E as ve,a as fe}from"./el-form-item-A78n4QB5.js";import{E as ge}from"./el-popper-BiOcgWnR.js";import{E as ne}from"./index-DwX5DKZI.js";import{E as se}from"./index-D88lUnba.js";import{E as be,a as ye,b as he}from"./el-select-CaOrtd8T.js";import{E as xe,a as ke,b as we}from"./el-radio-group-C-yXuNhJ.js";import{E as Ve}from"./el-divider-C0rco7N-.js";import{E as qe}from"./el-input-number-B9u0GRM3.js";import{d as ie,D as oe,e as y,w as n,o as u,q as l,s as o,c as _,ad as q,n as H,aa as f,M as w,g as $,x as v,y as V,j as M,G as $e,z as Ee,at as ze,al as Te,f as Q,au as Ce,av as Me,aw as Ue,ax as Se,A as F,v as Pe,ay as Ie}from"./index-Cqlj7vcl.js";import"./el-tooltip-l0sNRNKZ.js";import"./el-scrollbar-Ouf4QXxU.js";/* empty css */import{P as Fe}from"./PageCard-DjMRFwke.js";import{E as De}from"./el-dialog-vomGQzmb.js";import{E as Oe}from"./el-empty-Bd3yB6av.js";import{E as Re,a as Ae}from"./el-tab-pane-CMwRC8Ph.js";import{_ as ue}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as Ne,e as Ge,f as Le,u as Be}from"./fineTune-CMJCBG2h.js";import{g as je}from"./model-CWW1Wczf.js";import{g as Qe}from"./dataset-DzLnWz2N.js";import"./castArray-EioEbuNM.js";import"./_baseClone-CXWVM9KD.js";import"./index-BoTiWnu7.js";import"./index-CcvEzrx9.js";import"./raf-q_fay9c6.js";import"./index-CVnqIkly.js";import"./vnode-CbkaLjR-.js";import"./index-BzQ5uZ5s.js";import"./index-DiBcb3b0.js";import"./scroll-l-f8IXFz.js";import"./clamp-Q0qVCgXV.js";import"./toNumber-DUmW2q0M.js";import"./_baseIteratee-BLZ5vHSI.js";import"./omit-cmH8l6ot.js";import"./index-BRvPcFwU.js";import"./el-card-BgI0tZGy.js";import"./index-BLAj6_BJ.js";import"./use-dialog-DDhg0h52.js";import"./index-D4Q0qoMq.js";const He={class:"model-dialog-body"},Ke={class:"model-dialog-toolbar"},We={class:"model-dialog-content"},Ze={class:"model-series-list"},Je=["onClick"],Xe={class:"model-version-list"},Ye=["onClick"],et={class:"model-version-main"},tt={class:"model-dialog-footer"},at={class:"selected-model-summary"},lt={key:0,class:"selected-model-pill"},ot={class:"model-dialog-actions"},nt=ie({__name:"ModelSelectDialog",props:{modelValue:{type:Boolean},models:{},currentModelId:{}},emits:["update:modelValue","confirm"],setup(a,{emit:U}){const x=a,E=U,g=V("official"),z=V(""),h=V(""),k=V("");function D(p){return p.replace(/-\d+(?:\.\d+)?B.*$/i,"").replace(/-\d+(?:\.\d+)?b.*$/i,"").replace(/-\d{4}.*$/,"")}const s=M(()=>{const p=k.value.trim().toLowerCase(),i=x.models.filter(d=>g.value==="official"?d.model_source!=="api":d.model_source==="api");return p?i.filter(d=>[d.name,d.description,d.path,d.online_model_name].filter(Boolean).some(S=>String(S).toLowerCase().includes(p))):i}),I=M(()=>{const p=new Map;return s.value.forEach(i=>{const d=D(i.name),S=p.get(d)||[];S.push(i),p.set(d,S)}),Array.from(p.entries()).map(([i,d])=>({name:i,count:d.length,models:d}))}),N=M(()=>{var p;return((p=I.value.find(i=>i.name===z.value))==null?void 0:p.models)||[]}),O=M(()=>x.models.find(p=>p.id===h.value));function G(){var i;const p=((i=I.value[0])==null?void 0:i.name)||"";(!z.value||!I.value.some(d=>d.name===z.value))&&(z.value=p)}oe(()=>x.modelValue,p=>{if(p){const i=x.models.find(d=>d.id===x.currentModelId);g.value=(i==null?void 0:i.model_source)==="api"?"mine":"official",h.value=x.currentModelId,G()}}),oe([g,k],()=>{G()});function K(p){z.value=p}function W(p){h.value=p.id}function L(){E("update:modelValue",!1)}function Z(){h.value!==""&&h.value!==void 0&&h.value!==null&&E("confirm",h.value),E("update:modelValue",!1)}return(p,i)=>{const d=Re,S=Ae,J=ne,R=Oe,A=se,X=De;return u(),y(X,{"model-value":a.modelValue,class:"model-select-dialog",width:"860px",top:"10vh","show-close":!1,"append-to-body":"","onUpdate:modelValue":i[2]||(i[2]=m=>E("update:modelValue",m))},{header:n(()=>[l("div",{class:"model-dialog-header"},[i[4]||(i[4]=l("div",{class:"model-dialog-title"},[l("span",null,"选择模型"),l("em",null,"仅可选 1 个模型")],-1)),l("button",{class:"model-dialog-close",type:"button",onClick:L},[...i[3]||(i[3]=[l("i",{class:"fa fa-close"},null,-1)])])])]),footer:n(()=>[l("div",tt,[l("div",at,[l("span",null,"已选 "+f(O.value?1:0)+"/1",1),O.value?(u(),_("div",lt,[i[10]||(i[10]=l("i",{class:"fa fa-star-o"},null,-1)),v(" "+f(O.value.name),1)])):$("",!0)]),l("div",ot,[o(A,{onClick:L},{default:n(()=>[...i[11]||(i[11]=[v("取消",-1)])]),_:1}),o(A,{type:"primary",onClick:Z},{default:n(()=>[...i[12]||(i[12]=[v("确定",-1)])]),_:1})])])]),default:n(()=>[l("div",He,[l("div",Ke,[o(S,{modelValue:g.value,"onUpdate:modelValue":i[0]||(i[0]=m=>g.value=m),class:"model-tabs"},{default:n(()=>[o(d,{label:"官方模型",name:"official"}),o(d,{label:"我的模型",name:"mine"})]),_:1},8,["modelValue"]),o(J,{modelValue:k.value,"onUpdate:modelValue":i[1]||(i[1]=m=>k.value=m),class:"model-search",placeholder:"从全部模型中搜索",clearable:""},{suffix:n(()=>[...i[5]||(i[5]=[l("i",{class:"fa fa-search"},null,-1)])]),_:1},8,["modelValue"])]),l("div",We,[l("aside",Ze,[i[7]||(i[7]=l("div",{class:"column-title"},"模型系列",-1)),(u(!0),_(w,null,q(I.value,m=>(u(),_("button",{key:m.name,class:H(["model-series-item",{active:z.value===m.name}]),type:"button",onClick:Y=>K(m.name)},[i[6]||(i[6]=l("i",{class:"fa fa-star-o"},null,-1)),l("span",null,f(m.name),1),l("em",null,f(m.count),1)],10,Je))),128)),I.value.length?$("",!0):(u(),y(R,{key:0,description:"暂无模型","image-size":80}))]),l("section",Xe,[i[9]||(i[9]=l("div",{class:"column-title"},"快照版本",-1)),(u(!0),_(w,null,q(N.value,m=>(u(),_("button",{key:m.id,class:H(["model-version-item",{active:h.value===m.id}]),type:"button",onClick:Y=>W(m)},[l("div",et,[l("strong",null,f(m.name),1),l("span",null,f(m.description||m.path||m.online_model_name||"暂无模型描述"),1)]),i[8]||(i[8]=l("span",{class:"model-radio-dot"},null,-1))],10,Ye))),128)),N.value.length?$("",!0):(u(),y(R,{key:0,description:"暂无快照版本","image-size":80}))])])])]),_:1},8,["model-value"])}}}),st=ue(nt,[["__scopeId","data-v-7fb2f968"]]),de={batch_size:1,learning_rate:1e-4,n_epochs:1,save_steps:100,lr_scheduler_type:"cosine",max_length:512,warmup_ratio:.05,weight_decay:.01,lora_alpha:16,lora_dropout:.1,lora_rank:8,quantization_bit:0,export_quantized:!1,quant_method:"bnb",quant_bits:4,quant_group_size:128,export_format:"Q4_K_M"};function it(){return{name:"",description:"",train_type:"SFT",base_model:"",template:"qwen",train_method:"lora",train_dataset_id:"",auto_merge:!1,...de}}function ut(a,U){return{name:a.name,description:a.description,base_model:a.base_model,template:a.template,train_type:a.train_type,train_method:a.train_method,gpus:[...U],train_dataset_id:a.train_dataset_id,auto_merge:a.train_type==="SFT"&&a.auto_merge,output_model_name:a.name,batch_size:a.batch_size,learning_rate:a.learning_rate,n_epochs:a.n_epochs,save_steps:a.save_steps,lr_scheduler_type:a.lr_scheduler_type,max_length:a.max_length,warmup_ratio:a.warmup_ratio,weight_decay:a.weight_decay,lora_alpha:a.lora_alpha,lora_dropout:a.lora_dropout,lora_rank:a.lora_rank,quantization_bit:a.train_method==="lora"?a.quantization_bit:0,export_quantized:a.export_quantized,quant_method:a.export_quantized?a.quant_method:"",quant_bits:a.export_quantized?a.quant_bits:0,quant_group_size:a.export_quantized?a.quant_group_size:0,export_format:a.export_quantized&&a.quant_method==="gguf"?a.export_format:""}}function dt(a,U){const x=U.length?U.join(","):"0",E=a.train_type==="DPO"?"dpo":a.train_type==="CPT"?"cpt":"sft",g=[`CUDA_VISIBLE_DEVICES=${x} llamafactory-cli train`,` --stage ${E}`," --do_train"," --model_name_or_path <base_model_path>"," --dataset <dataset>",` --template ${a.template}`,` --finetuning_type ${a.train_method}`,` --output_dir ./saves/${a.name||"output"}`,` --per_device_train_batch_size ${a.batch_size}`,` --learning_rate ${a.learning_rate}`,` --num_train_epochs ${a.n_epochs}`,` --save_steps ${a.save_steps}`,` --lr_scheduler_type ${a.lr_scheduler_type}`,` --cutoff_len ${a.max_length}`,` --warmup_ratio ${a.warmup_ratio}`,` --weight_decay ${a.weight_decay}`];return a.train_method==="lora"&&(g.push(` --lora_alpha ${a.lora_alpha}`,` --lora_dropout ${a.lora_dropout}`,` --lora_rank ${a.lora_rank}`),a.quantization_bit&&g.push(` --quantization_bit ${a.quantization_bit}`)),a.export_quantized&&(g.push(` # 训练后导出量化模型:${a.quant_method} ${a.quant_bits}bit`),a.quant_method==="gguf"&&g.push(` # export_format=${a.export_format}`),(a.quant_method==="gptq"||a.quant_method==="awq")&&g.push(` # group_size=${a.quant_group_size}`)),g.join(` \\
|
||
`)}function rt(a){return{...a,status:"pending",progress:0}}const pt={class:"fine-tune-create page-card-host has-fixed-footer"},mt={class:"gpu-list"},_t=["onClick"],ct={class:"gpu-card-top"},vt={class:"gpu-title"},ft={class:"gpu-index"},gt={class:"gpu-name"},bt={class:"gpu-usage"},yt={class:"gpu-usage-bar"},ht={class:"gpu-meta"},xt={key:0,class:"gpu-empty"},kt={class:"hyperparam-section"},wt={class:"param-table-wrapper"},Vt={class:"param-table"},qt={class:"param-col name"},$t={class:"param-col config"},Et={key:2,class:"param-hint"},zt={class:"param-col desc"},Tt={class:"desc-text"},Ct={class:"param-footer"},Mt={class:"command-preview-wrapper"},Ut={class:"command-preview"},St={class:"form-actions-wrapper"},Pt=ie({__name:"FineTuneCreateView",setup(a){const U=Pe(),x=V(),E=V(!1),g=V([]),z=V([]),h=V([]),k=V([]),D=V(!1),s=Ee(it()),I={name:[{required:!0,message:"请输入任务名称",trigger:"blur"},{pattern:/^[a-zA-Z0-9_]+$/,message:"仅支持字母、数字、下划线",trigger:"blur"},{max:50,message:"不超过 50 字符",trigger:"blur"}],base_model:[{required:!0,message:"请选择模型",trigger:"change"}],template:[{required:!0,message:"请选择训练模板",trigger:"change"}],train_dataset_id:[{required:!0,message:"请选择训练数据集",trigger:"change"}]},N=M(()=>s.train_method==="lora"),O=M(()=>g.value.find(r=>r.id===s.base_model)),G=M(()=>{var r;return((r=O.value)==null?void 0:r.name)||""}),K=M(()=>dt(s,k.value));function W(r){const e=k.value.indexOf(r);e===-1?k.value.push(r):k.value.splice(e,1)}function L(r){return`${Math.max(0,Math.min(r,100))}%`}function Z(){D.value=!0}function p(r){var e;s.base_model=r,(e=x.value)==null||e.validateField("base_model")}function i(){Object.assign(s,de)}const d=V(!1),S=M(()=>{const r=[{key:"batch_size",name:"batch_size",desc:"批次大小,代表模型训练过程中,模型更新一次参数所需要的数据样本数。",hint:"[1, 64], step:1",type:"number",min:1,max:64,step:1},{key:"learning_rate",name:"learning_rate",desc:"学习率,代表每次更新数据的增量参数权重比例。",hint:"[0.000001, 1]",type:"number",min:1e-6,max:1,step:1e-5,precision:6},{key:"n_epochs",name:"n_epochs",desc:"循环次数,代表模型训练过程中模型学习数据集的次数,可理解为看几遍数据,一般建议的范围是 1-3 遍即可,可依据需求进行调整",hint:"[1, 100], step:1",type:"number",min:1,max:100,step:1},{key:"save_steps",name:"save_steps",desc:"保存步数,训练阶段模型保存的间隔步长。",hint:"[10, 10000]",type:"number",min:10,max:1e4,step:1},{key:"lr_scheduler_type",name:"lr_scheduler_type",desc:"学习率调整策略,选择不同的学习率策略。",hint:"",type:"select",options:Ie},{key:"max_length",name:"max_length",desc:"序列长度,单个训练数据样本的最大长度。",hint:"[64, 4096]",type:"number",min:64,max:4096,step:1},{key:"warmup_ratio",name:"warmup_ratio",desc:"学习率预热比例,学习率预热阶段占总训练步数的比例。",hint:"[0, 1]",type:"number",min:0,max:1,step:.01,precision:2},{key:"weight_decay",name:"weight_decay",desc:"权重衰减,用于在优化过程中对模型参数施加惩罚,防止过拟合。",hint:"[0, 1]",type:"number",min:0,max:1,step:.01,precision:2}];return N.value&&r.push({key:"lora_alpha",name:"lora_alpha",desc:"LoRA 缩放系数。",hint:"16/32/64/128",type:"select",options:[{label:"16",value:16},{label:"32",value:32},{label:"64",value:64},{label:"128",value:128}]},{key:"lora_rank",name:"lora_rank",desc:"LoRA 秩大小,控制低秩矩阵的维度。",hint:"8/16/32/64",type:"select",options:[{label:"8",value:8},{label:"16",value:16},{label:"32",value:32},{label:"64",value:64}]},{key:"lora_dropout",name:"lora_dropout",desc:"LoRA 层的 dropout 比例。",hint:"[0, 1]",type:"number",min:0,max:1,step:.05,precision:2}),r}),J=M(()=>d.value?S.value:S.value.slice(0,3));function R(r){const e=s[r];return typeof e=="boolean"?Number(e):e}function A(r,e){e!==void 0&&Reflect.set(s,r,e)}async function X(){try{g.value=await je()||[]}catch{g.value=[]}}async function m(){try{z.value=await Qe()||[]}catch{z.value=[]}}async function Y(){try{const r=await ze();h.value=(r==null?void 0:r.gpu)||[],h.value.length>0&&(k.value=[0])}catch{h.value=[]}}async function re(){x.value&&await x.value.validate(async r=>{if(r){if(k.value.length===0){F.warning("请至少选择一个 GPU");return}E.value=!0;try{let e;try{e=await Ne(s.name)}catch{F.error("任务名校验失败,请稍后重试");return}if(e.exists){F.error("任务名称已存在,请更换");return}const T=ut(s,k.value),c=(await Ge(rt(T))).id;try{await Le({...T,task_id:c}),F.success("训练任务已创建并启动")}catch{await Be(c,{status:"failed"}),F.error("任务已创建,但训练启动失败")}U.push("/fine-tune")}catch{F.error("训练任务创建失败,请稍后重试")}finally{E.value=!1}}})}function pe(){U.back()}return $e(()=>{X(),m(),Y()}),(r,e)=>{const T=Ve,B=ne,c=fe,ee=ke,ae=xe,C=ye,me=he,P=be,le=we,j=se,te=qe,_e=ge,ce=ve;return u(),_("div",pt,[o(Fe,{title:"创建训练任务"},{default:n(()=>[o(ce,{ref_key:"formRef",ref:x,model:s,rules:I,"label-width":"140px","label-position":"left"},{default:n(()=>[o(T,{"content-position":"left"},{default:n(()=>[...e[15]||(e[15]=[v("基本信息",-1)])]),_:1}),o(c,{label:"任务名称",prop:"name"},{default:n(()=>[o(B,{modelValue:s.name,"onUpdate:modelValue":e[0]||(e[0]=t=>s.name=t),placeholder:"字母、数字、下划线",maxlength:"50","show-word-limit":"",style:{width:"420px"}},null,8,["modelValue"])]),_:1}),o(c,{label:"任务描述"},{default:n(()=>[o(B,{modelValue:s.description,"onUpdate:modelValue":e[1]||(e[1]=t=>s.description=t),type:"textarea",rows:4,maxlength:"200","show-word-limit":"",style:{width:"600px"}},null,8,["modelValue"])]),_:1}),o(T,{"content-position":"left"},{default:n(()=>[...e[16]||(e[16]=[v("训练配置",-1)])]),_:1}),o(c,{label:"GPU 硬件"},{default:n(()=>[l("div",mt,[(u(!0),_(w,null,q(h.value,(t,b)=>(u(),_("div",{key:b,class:H(["gpu-card",{active:k.value.includes(b),"is-busy":t.gpu_percent>80}]),onClick:It=>W(b)},[l("div",ct,[l("div",vt,[l("span",ft,"GPU-"+f(b),1),l("span",gt,f(t.name),1)]),l("span",bt,f(t.gpu_percent)+"%",1)]),l("div",yt,[l("span",{style:Te({width:L(t.gpu_percent)})},null,4)]),l("div",ht,[l("span",null,"显存 "+f(t.memory_used_gb)+"/"+f(t.memory_total_gb)+"GB",1),l("span",null,f(t.temperature)+"°C",1),l("span",null,f(t.power_w)+"W",1)])],10,_t))),128)),h.value.length?$("",!0):(u(),_("div",xt,"暂无 GPU 信息"))])]),_:1}),o(c,{label:"训练方式"},{default:n(()=>[o(ae,{modelValue:s.train_type,"onUpdate:modelValue":e[2]||(e[2]=t=>s.train_type=t)},{default:n(()=>[o(ee,{value:"SFT"},{default:n(()=>[...e[17]||(e[17]=[v("SFT 微调训练",-1)])]),_:1}),o(ee,{value:"DPO"},{default:n(()=>[...e[18]||(e[18]=[v("DPO 偏好训练",-1)])]),_:1}),o(ee,{value:"CPT"},{default:n(()=>[...e[19]||(e[19]=[v("CPT 继续预训练",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(c,{label:"选择模型",prop:"base_model"},{default:n(()=>[o(B,{class:"model-picker-input","model-value":G.value,placeholder:"请选择基座模型",readonly:"",onClick:Z,style:{width:"420px"}},{suffix:n(()=>[...e[20]||(e[20]=[l("i",{class:"fa fa-angle-right"},null,-1)])]),_:1},8,["model-value"])]),_:1}),o(c,{label:"训练模板",prop:"template"},{default:n(()=>[o(P,{modelValue:s.template,"onUpdate:modelValue":e[3]||(e[3]=t=>s.template=t),placeholder:"请选择训练模板",filterable:"",style:{width:"420px"}},{default:n(()=>[(u(!0),_(w,null,q(Q(Ce),t=>(u(),y(me,{key:t.label,label:t.label},{default:n(()=>[(u(!0),_(w,null,q(t.options,b=>(u(),y(C,{key:b.value,label:b.label,value:b.value},null,8,["label","value"]))),128))]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])]),_:1}),o(c,{label:"训练方法"},{default:n(()=>[o(ae,{modelValue:s.train_method,"onUpdate:modelValue":e[4]||(e[4]=t=>s.train_method=t)},{default:n(()=>[o(le,{value:"lora"},{default:n(()=>[...e[21]||(e[21]=[v("LoRA(高效微调)",-1)])]),_:1}),o(le,{value:"full"},{default:n(()=>[...e[22]||(e[22]=[v("全参微调",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),o(T,{"content-position":"left"},{default:n(()=>[e[24]||(e[24]=l("span",{style:{"font-size":"15px","font-weight":"600",color:"#1f2937","margin-right":"12px"}},"超参配置",-1)),o(j,{link:"",type:"primary",size:"small",onClick:i},{default:n(()=>[...e[23]||(e[23]=[l("i",{class:"fa fa-refresh",style:{"margin-right":"4px"}},null,-1),v(" 恢复默认配置 ",-1)])]),_:1})]),_:1}),l("div",kt,[l("div",wt,[l("div",Vt,[e[25]||(e[25]=l("div",{class:"param-header"},[l("div",{class:"param-col name"},"参数名称"),l("div",{class:"param-col config"},"配置"),l("div",{class:"param-col desc"},"说明")],-1)),(u(!0),_(w,null,q(J.value,t=>(u(),_("div",{class:"param-row",key:t.key},[l("div",qt,f(t.name),1),l("div",$t,[t.type==="number"?(u(),y(te,{key:0,"model-value":Number(R(t.key)),min:t.min,max:t.max,step:t.step,precision:t.precision,"controls-position":"right",style:{width:"200px"},"onUpdate:modelValue":b=>A(t.key,b)},null,8,["model-value","min","max","step","precision","onUpdate:modelValue"])):t.type==="select"?(u(),y(P,{key:1,"model-value":R(t.key),style:{width:"200px"},"onUpdate:modelValue":b=>A(t.key,b)},{default:n(()=>[(u(!0),_(w,null,q(t.options,b=>(u(),y(C,{key:b.value,label:b.label,value:b.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"])):$("",!0),t.hint?(u(),_("span",Et,f(t.hint),1)):$("",!0)]),l("div",zt,[o(_e,{content:t.desc,placement:"top",effect:"dark","show-after":200},{default:n(()=>[l("span",Tt,f(t.desc),1)]),_:2},1032,["content"])])]))),128))]),l("div",Ct,[o(j,{link:"",type:"primary",onClick:e[5]||(e[5]=t=>d.value=!d.value)},{default:n(()=>[l("i",{class:H(d.value?"fa fa-angle-up":"fa fa-angle-down"),style:{"margin-right":"4px"}},null,2),v(" "+f(d.value?"收起配置":"展开配置"),1)]),_:1})])])]),o(T,{"content-position":"left"},{default:n(()=>[...e[26]||(e[26]=[v("数据配置",-1)])]),_:1}),o(c,{label:"训练数据集",prop:"train_dataset_id"},{default:n(()=>[o(P,{modelValue:s.train_dataset_id,"onUpdate:modelValue":e[6]||(e[6]=t=>s.train_dataset_id=t),placeholder:"请选择训练数据集",filterable:"",style:{width:"420px"}},{default:n(()=>[(u(!0),_(w,null,q(z.value,t=>(u(),y(C,{key:t.id,label:t.name,value:t.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),s.train_type==="SFT"?(u(),_(w,{key:0},[o(T,{"content-position":"left"},{default:n(()=>[...e[27]||(e[27]=[v("合并模型",-1)])]),_:1}),o(c,{label:"自动合并权重并保存"},{default:n(()=>[o(P,{modelValue:s.auto_merge,"onUpdate:modelValue":e[7]||(e[7]=t=>s.auto_merge=t),style:{width:"420px"}},{default:n(()=>[o(C,{label:"否",value:!1}),o(C,{label:"是",value:!0})]),_:1},8,["modelValue"])]),_:1})],64)):$("",!0),o(T,{"content-position":"left"},{default:n(()=>[...e[28]||(e[28]=[v("模型量化",-1)])]),_:1}),s.train_method==="lora"?(u(),y(c,{key:1,label:"训练时量化"},{default:n(()=>[o(P,{modelValue:s.quantization_bit,"onUpdate:modelValue":e[8]||(e[8]=t=>s.quantization_bit=t),style:{width:"420px"}},{default:n(()=>[(u(!0),_(w,null,q(Q(Me),t=>(u(),y(C,{key:t.value,label:t.label,value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})):$("",!0),o(c,{label:"导出量化模型"},{default:n(()=>[o(P,{modelValue:s.export_quantized,"onUpdate:modelValue":e[9]||(e[9]=t=>s.export_quantized=t),style:{width:"420px"}},{default:n(()=>[o(C,{label:"否",value:!1}),o(C,{label:"是",value:!0})]),_:1},8,["modelValue"])]),_:1}),s.export_quantized?(u(),_(w,{key:2},[o(c,{label:"量化方法"},{default:n(()=>[o(P,{modelValue:s.quant_method,"onUpdate:modelValue":e[10]||(e[10]=t=>s.quant_method=t),style:{width:"420px"}},{default:n(()=>[(u(!0),_(w,null,q(Q(Ue),t=>(u(),y(C,{key:t.value,label:t.label,value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),o(c,{label:"量化位数"},{default:n(()=>[o(te,{modelValue:s.quant_bits,"onUpdate:modelValue":e[11]||(e[11]=t=>s.quant_bits=t),min:s.quant_method==="bnb"?4:2,max:s.quant_method==="bnb"?8:16,step:1,"controls-position":"right",style:{width:"200px"}},null,8,["modelValue","min","max"])]),_:1}),s.quant_method==="gptq"||s.quant_method==="awq"?(u(),y(c,{key:0,label:"分组大小"},{default:n(()=>[o(te,{modelValue:s.quant_group_size,"onUpdate:modelValue":e[12]||(e[12]=t=>s.quant_group_size=t),min:32,max:1024,step:32,"controls-position":"right",style:{width:"200px"}},null,8,["modelValue"])]),_:1})):$("",!0),s.quant_method==="gguf"?(u(),y(c,{key:1,label:"导出格式"},{default:n(()=>[o(P,{modelValue:s.export_format,"onUpdate:modelValue":e[13]||(e[13]=t=>s.export_format=t),style:{width:"420px"}},{default:n(()=>[(u(!0),_(w,null,q(Q(Se),t=>(u(),y(C,{key:t.value,label:t.label,value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})):$("",!0)],64)):$("",!0),o(T,{"content-position":"left"},{default:n(()=>[...e[29]||(e[29]=[v("训练命令预览",-1)])]),_:1}),l("div",Mt,[l("pre",Ut,f(K.value),1)]),l("div",St,[o(j,{type:"primary",loading:E.value,onClick:re},{default:n(()=>[...e[30]||(e[30]=[v("创建并启动训练",-1)])]),_:1},8,["loading"]),o(j,{onClick:pe},{default:n(()=>[...e[31]||(e[31]=[v("取消",-1)])]),_:1})])]),_:1},8,["model"])]),_:1}),o(st,{modelValue:D.value,"onUpdate:modelValue":e[14]||(e[14]=t=>D.value=t),models:g.value,"current-model-id":s.base_model,onConfirm:p},null,8,["modelValue","models","current-model-id"])])}}}),xa=ue(Pt,[["__scopeId","data-v-5e295ce9"]]);export{xa as default};
|