1
This commit is contained in:
@@ -28,9 +28,7 @@ const coverFile = ref(null) // 新选择的封面文件(el-upload 单文件)
|
||||
const coverFileList = ref([]) // 封面回显:已有封面(服务端 url)或新选文件(本地预览)
|
||||
const coverDeleted = ref(false) // 用户删除了已有封面(保存时调删除接口)
|
||||
|
||||
const trainVisible = ref(false)
|
||||
const training = ref(false)
|
||||
const trainForm = reactive({ datasetId: 0, name: '', imgsz: 704, epochs: 150, batch: 16, device: '0' })
|
||||
|
||||
const statusMap = { building: '建设中', labeled: '已标注', synced: '已同步' }
|
||||
const statusTag = { building: 'info', labeled: 'success', synced: 'primary' }
|
||||
@@ -133,29 +131,14 @@ async function submitConfig() {
|
||||
}
|
||||
}
|
||||
|
||||
// ---------- 开始训练 ----------
|
||||
// ---------- 开始训练(一键发起:任务名自动生成,参数走 config.yml training 节点) ----------
|
||||
|
||||
function openTrain(row) {
|
||||
trainForm.datasetId = row.id
|
||||
trainForm.name = `${row.name} 训练`
|
||||
trainForm.imgsz = 704
|
||||
trainForm.epochs = 150
|
||||
trainForm.batch = 16
|
||||
trainForm.device = '0'
|
||||
trainVisible.value = true
|
||||
}
|
||||
|
||||
function submitTrain() {
|
||||
if (!trainForm.name.trim()) {
|
||||
ElMessage.warning('请输入任务名称')
|
||||
return
|
||||
}
|
||||
function startTrain(row) {
|
||||
training.value = true
|
||||
request
|
||||
.post('/trainings', { ...trainForm })
|
||||
.post('/trainings', { datasetId: row.id })
|
||||
.then(() => {
|
||||
ElMessage.success('训练任务已发起,完成后可发布为模型版本')
|
||||
trainVisible.value = false
|
||||
load()
|
||||
})
|
||||
.catch(() => {})
|
||||
@@ -268,7 +251,7 @@ onBeforeUnmount(() => {
|
||||
</div>
|
||||
</div>
|
||||
<div class="ds-actions" @click.stop>
|
||||
<el-button type="primary" size="small" :icon="VideoPlay" :disabled="row.trainingStatus === 'running'" @click="openTrain(row)">
|
||||
<el-button type="primary" size="small" :icon="VideoPlay" :disabled="row.trainingStatus === 'running'" @click="startTrain(row)">
|
||||
{{ row.trainingStatus === 'running' ? '训练中' : '开始训练' }}
|
||||
</el-button>
|
||||
<el-button size="small" :icon="Setting" @click="openConfig(row)">配置</el-button>
|
||||
@@ -361,32 +344,6 @@ onBeforeUnmount(() => {
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 开始训练 -->
|
||||
<el-dialog v-model="trainVisible" title="开始训练" width="min(480px, 92vw)">
|
||||
<el-form label-width="90px">
|
||||
<el-form-item label="任务名称">
|
||||
<el-input v-model="trainForm.name" maxlength="50" show-word-limit placeholder="如:雉鸡数据集 v2 训练" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分辨率">
|
||||
<el-input-number v-model="trainForm.imgsz" :min="64" :max="2048" :step="32" />
|
||||
<span class="field-tip">与端侧推理对齐,默认 704</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="轮数">
|
||||
<el-input-number v-model="trainForm.epochs" :min="1" :max="1000" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Batch">
|
||||
<el-input-number v-model="trainForm.batch" :min="1" :max="128" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设备">
|
||||
<el-input v-model="trainForm.device" maxlength="16" placeholder="GPU 编号 0,CPU 填 cpu" />
|
||||
</el-form-item>
|
||||
<div class="start-tip">训练前自动整理 80/20 训练/验证集,须先完成图片标注;训练机并发度 1,已有运行中任务会被拒绝。</div>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="trainVisible = false">取消</el-button>
|
||||
<el-button type="primary" :loading="training" @click="submitTrain">发起训练</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
@@ -512,12 +469,6 @@ onBeforeUnmount(() => {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
}
|
||||
.start-tip {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
line-height: 1.6;
|
||||
margin-left: 90px;
|
||||
}
|
||||
.cover-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
Reference in New Issue
Block a user