fix: gpus_per_replica appears null
This commit is contained in:
@@ -71,6 +71,8 @@ export default {
|
|||||||
'e.g., --ctx-size=8192 (use = to separate name and value)',
|
'e.g., --ctx-size=8192 (use = to separate name and value)',
|
||||||
'models.form.backend_parameters.vllm.placeholder':
|
'models.form.backend_parameters.vllm.placeholder':
|
||||||
'e.g., --max-model-len=8192 (use = to separate name and value)',
|
'e.g., --max-model-len=8192 (use = to separate name and value)',
|
||||||
|
'models.form.backend_parameters.sglang.placeholder':
|
||||||
|
'e.g., --max-total-tokens=8192 (use = to separate name and value)',
|
||||||
'models.form.backend_parameters.vllm.tips':
|
'models.form.backend_parameters.vllm.tips':
|
||||||
'More {backend} parameter details',
|
'More {backend} parameter details',
|
||||||
'models.logs.pagination.prev': 'Previous {lines} Lines',
|
'models.logs.pagination.prev': 'Previous {lines} Lines',
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ export default {
|
|||||||
'例: --ctx-size=8192(=で名前と値を分ける)',
|
'例: --ctx-size=8192(=で名前と値を分ける)',
|
||||||
'models.form.backend_parameters.vllm.placeholder':
|
'models.form.backend_parameters.vllm.placeholder':
|
||||||
'例: --max-model-len=8192(=で名前と値を分ける)',
|
'例: --max-model-len=8192(=で名前と値を分ける)',
|
||||||
|
'models.form.backend_parameters.sglang.placeholder':
|
||||||
|
'例: --max-total-tokens=8192(=で名前と値を分ける)',
|
||||||
'models.form.backend_parameters.vllm.tips': '詳細な{backend}パラメータ情報',
|
'models.form.backend_parameters.vllm.tips': '詳細な{backend}パラメータ情報',
|
||||||
'models.logs.pagination.prev': '前の{lines}行',
|
'models.logs.pagination.prev': '前の{lines}行',
|
||||||
'models.logs.pagination.next': '次の{lines}行',
|
'models.logs.pagination.next': '次の{lines}行',
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ export default {
|
|||||||
'например: --ctx-size=8192(параметр и значение разделены знаком =)',
|
'например: --ctx-size=8192(параметр и значение разделены знаком =)',
|
||||||
'models.form.backend_parameters.vllm.placeholder':
|
'models.form.backend_parameters.vllm.placeholder':
|
||||||
'например: --max-model-len=8192(параметр и значение разделены знаком =)',
|
'например: --max-model-len=8192(параметр и значение разделены знаком =)',
|
||||||
|
'models.form.backend_parameters.sglang.placeholder':
|
||||||
|
'например: --max-total-tokens=8192(параметр и значение разделены знаком =)',
|
||||||
'models.form.backend_parameters.vllm.tips':
|
'models.form.backend_parameters.vllm.tips':
|
||||||
'Подробнее о параметрах {backend}',
|
'Подробнее о параметрах {backend}',
|
||||||
'models.logs.pagination.prev': 'Предыдущие {lines} строк',
|
'models.logs.pagination.prev': 'Предыдущие {lines} строк',
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ export default {
|
|||||||
'例如,--ctx-size=8192(参数名和值用 = 号分隔)',
|
'例如,--ctx-size=8192(参数名和值用 = 号分隔)',
|
||||||
'models.form.backend_parameters.vllm.placeholder':
|
'models.form.backend_parameters.vllm.placeholder':
|
||||||
'例如,--max-model-len=8192(参数名和值用 = 号分隔)',
|
'例如,--max-model-len=8192(参数名和值用 = 号分隔)',
|
||||||
|
'models.form.backend_parameters.sglang.placeholder':
|
||||||
|
'例如,--max-total-tokens=8192(参数名和值用 = 号分隔)',
|
||||||
'models.form.backend_parameters.vllm.tips': '更多 {backend} 参数说明查看',
|
'models.form.backend_parameters.vllm.tips': '更多 {backend} 参数说明查看',
|
||||||
'models.logs.pagination.prev': '上一 {lines} 行',
|
'models.logs.pagination.prev': '上一 {lines} 行',
|
||||||
'models.logs.pagination.next': '下一 {lines} 行',
|
'models.logs.pagination.next': '下一 {lines} 行',
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ export const backendParamsHolderTips = {
|
|||||||
holder: 'models.form.backend_parameters.vllm.placeholder',
|
holder: 'models.form.backend_parameters.vllm.placeholder',
|
||||||
tooltip: 'models.form.backend_parameters.vllm.tips'
|
tooltip: 'models.form.backend_parameters.vllm.tips'
|
||||||
},
|
},
|
||||||
|
[backendOptionsMap.SGLang]: {
|
||||||
|
holder: 'models.form.backend_parameters.sglang.placeholder',
|
||||||
|
tooltip: ''
|
||||||
|
},
|
||||||
[backendOptionsMap.voxBox]: null
|
[backendOptionsMap.voxBox]: null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -51,20 +51,13 @@ const scheduleTypeTips = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const gpuAllocateTypeTips = [
|
const GPUsPerReplicaTips = [
|
||||||
{
|
{
|
||||||
title: {
|
title: {
|
||||||
text: 'models.form.gpusAllocationType.auto',
|
text: 'common.options.auto',
|
||||||
locale: true
|
locale: true
|
||||||
},
|
},
|
||||||
tips: 'models.form.gpusAllocationType.auto.tips'
|
tips: 'models.form.gpusAllocationType.auto.tips'
|
||||||
},
|
|
||||||
{
|
|
||||||
title: {
|
|
||||||
text: 'models.form.gpusAllocationType.custom',
|
|
||||||
locale: true
|
|
||||||
},
|
|
||||||
tips: 'models.form.gpusAllocationType.custom.tips'
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -98,7 +91,11 @@ const ScheduleTypeForm: React.FC = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleGpusPerReplicasChange = (val: string | number | null) => {
|
const handleGpusPerReplicasChange = (val: string | number | null) => {
|
||||||
form.setFieldValue(['gpu_selector', 'gpus_per_replica'], val);
|
if (val === null) {
|
||||||
|
form.setFieldValue(['gpu_selector', 'gpus_per_replica'], -1);
|
||||||
|
} else {
|
||||||
|
form.setFieldValue(['gpu_selector', 'gpus_per_replica'], val);
|
||||||
|
}
|
||||||
|
|
||||||
onValuesChange?.({}, form.getFieldsValue());
|
onValuesChange?.({}, form.getFieldsValue());
|
||||||
};
|
};
|
||||||
@@ -128,23 +125,6 @@ const ScheduleTypeForm: React.FC = () => {
|
|||||||
onValuesChange?.({}, form.getFieldsValue());
|
onValuesChange?.({}, form.getFieldsValue());
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleOnStepReplica = async (value: number | string | null) => {
|
|
||||||
if (value === null) {
|
|
||||||
await new Promise((resolve) => {
|
|
||||||
setTimeout(resolve, 200);
|
|
||||||
});
|
|
||||||
form.setFieldValue(['gpu_selector', 'gpus_per_replica'], 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const isPowerOfTwo = (n: number) => (n & (n - 1)) === 0 && n !== 0; // check power of two
|
|
||||||
if (!isPowerOfTwo(value as number)) {
|
|
||||||
const newValue = Math.pow(2, Math.round(Math.log2(value as number)));
|
|
||||||
form.setFieldValue(['gpu_selector', 'gpus_per_replica'], newValue);
|
|
||||||
onValuesChange?.({}, form.getFieldsValue());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const onSelectorChange = (field: string, allowEmpty?: boolean) => {
|
const onSelectorChange = (field: string, allowEmpty?: boolean) => {
|
||||||
const workerSelector = form.getFieldValue(field);
|
const workerSelector = form.getFieldValue(field);
|
||||||
// check if all keys have values
|
// check if all keys have values
|
||||||
@@ -246,15 +226,19 @@ const ScheduleTypeForm: React.FC = () => {
|
|||||||
{ label: '4', value: 4 },
|
{ label: '4', value: 4 },
|
||||||
{ label: '8', value: 8 }
|
{ label: '8', value: 8 }
|
||||||
]}
|
]}
|
||||||
|
description={
|
||||||
|
<TooltipList list={GPUsPerReplicaTips}></TooltipList>
|
||||||
|
}
|
||||||
popupRender={(originNode) => (
|
popupRender={(originNode) => (
|
||||||
<div>
|
<div>
|
||||||
{originNode}
|
{originNode}
|
||||||
<InputWrapper>
|
<InputWrapper>
|
||||||
<InputNumber
|
<InputNumber
|
||||||
|
min={1}
|
||||||
step={1}
|
step={1}
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
defaultValue={
|
defaultValue={
|
||||||
GPUsPerReplicas === null ? -1 : GPUsPerReplicas
|
GPUsPerReplicas === -1 ? null : GPUsPerReplicas
|
||||||
}
|
}
|
||||||
value={GPUsPerReplicas === -1 ? null : GPUsPerReplicas}
|
value={GPUsPerReplicas === -1 ? null : GPUsPerReplicas}
|
||||||
onChange={handleGpusPerReplicasChange}
|
onChange={handleGpusPerReplicasChange}
|
||||||
@@ -263,7 +247,6 @@ const ScheduleTypeForm: React.FC = () => {
|
|||||||
</InputWrapper>
|
</InputWrapper>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
onChange={handleOnStepReplica}
|
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Reference in New Issue
Block a user