chore: update description for adding worker

This commit is contained in:
jialin
2025-11-06 19:38:01 +08:00
parent 7334bcdf83
commit fadff34f5f
9 changed files with 79 additions and 26 deletions
+1
View File
@@ -2,6 +2,7 @@ export default {
'dashboard.title': 'Dashboard', 'dashboard.title': 'Dashboard',
'dashboard.workers': 'Workers', 'dashboard.workers': 'Workers',
'dashboard.models': 'Models', 'dashboard.models': 'Models',
'dashboard.clusters': 'Clusters',
'dashboard.totalgpus': 'GPUs', 'dashboard.totalgpus': 'GPUs',
'dashboard.allocategpus': 'Allocated GPUs', 'dashboard.allocategpus': 'Allocated GPUs',
'dashboard.instances': 'Instances', 'dashboard.instances': 'Instances',
+4 -2
View File
@@ -30,7 +30,8 @@ export default {
'dashboard.usage.export.date': 'Date', 'dashboard.usage.export.date': 'Date',
'dashboard.usage.datePicker.last7days': 'Last 7 Days', 'dashboard.usage.datePicker.last7days': 'Last 7 Days',
'dashboard.usage.datePicker.last30days': 'Last 30 Days', 'dashboard.usage.datePicker.last30days': 'Last 30 Days',
'dashboard.usage.datePicker.last60days': 'Last 60 Days' 'dashboard.usage.datePicker.last60days': 'Last 60 Days',
'dashboard.clusters': 'Clusters'
}; };
// ========== To-Do: Translate Keys (Remove After Translation) ========== // ========== To-Do: Translate Keys (Remove After Translation) ==========
@@ -42,5 +43,6 @@ export default {
// 6. 'dashboard.usage.export.date': 'Date', // 6. 'dashboard.usage.export.date': 'Date',
// 7. 'dashboard.usage.datePicker.last7days': 'Last 7 Days', // 7. 'dashboard.usage.datePicker.last7days': 'Last 7 Days',
// 8.'dashboard.usage.datePicker.last30days': 'Last 30 Days', // 8.'dashboard.usage.datePicker.last30days': 'Last 30 Days',
// 9. 'dashboard.usage.datePicker.last60days': 'Last 60 Days' // 9. 'dashboard.usage.datePicker.last60days': 'Last 60 Days',
// 10. 'dashboard.clusters': 'Clusters',
// ========== End of To-Do List ========== // ========== End of To-Do List ==========
+3 -2
View File
@@ -30,9 +30,10 @@ export default {
'dashboard.usage.export.date': 'Дата', 'dashboard.usage.export.date': 'Дата',
'dashboard.usage.datePicker.last7days': 'Последние 7 Days', 'dashboard.usage.datePicker.last7days': 'Последние 7 Days',
'dashboard.usage.datePicker.last30days': 'Последние 30 Days', 'dashboard.usage.datePicker.last30days': 'Последние 30 Days',
'dashboard.usage.datePicker.last60days': 'Последние 60 Days' 'dashboard.usage.datePicker.last60days': 'Последние 60 Days',
'dashboard.clusters': 'Clusters'
}; };
// ========== To-Do: Translate Keys (Remove After Translation) ========== // ========== To-Do: Translate Keys (Remove After Translation) ==========
// 1. 'dashboard.clusters': 'Clusters',
// ========== End of To-Do List ========== // ========== End of To-Do List ==========
+1
View File
@@ -2,6 +2,7 @@ export default {
'dashboard.title': '概览', 'dashboard.title': '概览',
'dashboard.workers': '节点', 'dashboard.workers': '节点',
'dashboard.models': '模型', 'dashboard.models': '模型',
'dashboard.clusters': '集群',
'dashboard.totalgpus': 'GPUs', 'dashboard.totalgpus': 'GPUs',
'dashboard.allocategpus': '已分配 GPU 数量', 'dashboard.allocategpus': '已分配 GPU 数量',
'dashboard.instances': '实例', 'dashboard.instances': '实例',
@@ -28,7 +28,7 @@ const NotesWrapper = styled.ol`
font-weight: 400; font-weight: 400;
margin: 0 !important; margin: 0 !important;
padding: 0 !important; padding: 0 !important;
line-height: 1.2; line-height: 1.25;
li { li {
margin-left: 12px !important; margin-left: 12px !important;
} }
@@ -156,6 +156,7 @@ const AddWorkerStep: React.FC<AddModalProps> = ({
{intl.formatMessage({ id: 'clusters.create.addCommand.tips' })} {intl.formatMessage({ id: 'clusters.create.addCommand.tips' })}
</div> </div>
<AlertInfoBlock <AlertInfoBlock
maxHeight={200}
style={{ marginBottom: 8 }} style={{ marginBottom: 8 }}
type="warning" type="warning"
icon={<ExclamationCircleFilled />} icon={<ExclamationCircleFilled />}
+2 -2
View File
@@ -58,8 +58,8 @@ const Overview: React.FC = () => {
xs={{ flex: '100%' }} xs={{ flex: '100%' }}
sm={{ flex: '50%' }} sm={{ flex: '50%' }}
md={{ flex: '50%' }} md={{ flex: '50%' }}
lg={{ flex: '25%' }} lg={{ flex: '20%' }}
xl={{ flex: '25%' }} xl={{ flex: '20%' }}
key={config.key} key={config.key}
> >
{renderCardItem({ {renderCardItem({
+5
View File
@@ -1,4 +1,9 @@
export const overviewConfigs = [ export const overviewConfigs = [
{
key: 'cluster_count',
label: 'dashboard.clusters',
backgroundColor: 'var(--color-white-1)'
},
{ {
key: 'worker_count', key: 'worker_count',
label: 'dashboard.workers', label: 'dashboard.workers',
+13 -2
View File
@@ -15,7 +15,7 @@ const KVCacheForm = () => {
const backend = Form.useWatch('backend', form); const backend = Form.useWatch('backend', form);
const configCacheRef = useRef<any>({}); const configCacheRef = useRef<any>({});
const handleOnChange = async (e: any) => { const handleEnableOnChange = async (e: any) => {
if (e.target.checked) { if (e.target.checked) {
form.setFieldsValue({ form.setFieldsValue({
extended_kv_cache: { extended_kv_cache: {
@@ -28,6 +28,17 @@ const KVCacheForm = () => {
} else { } else {
configCacheRef.current = form.getFieldValue('extended_kv_cache'); configCacheRef.current = form.getFieldValue('extended_kv_cache');
} }
await new Promise((resolve) => {
setTimeout(resolve, 100);
});
onValuesChange?.(
{
extended_kv_cache: {
enabled: e.target.checked
}
},
form.getFieldsValue()
);
}; };
const builtInBackend = useMemo(() => { const builtInBackend = useMemo(() => {
@@ -56,7 +67,7 @@ const KVCacheForm = () => {
id: 'models.form.kvCache.tips2' id: 'models.form.kvCache.tips2'
})} })}
disabled={!builtInBackend} disabled={!builtInBackend}
onChange={handleOnChange} onChange={handleEnableOnChange}
label={intl.formatMessage({ id: 'models.form.extendedkvcache' })} label={intl.formatMessage({ id: 'models.form.extendedkvcache' })}
></CheckboxField> ></CheckboxField>
</Form.Item> </Form.Item>
+48 -17
View File
@@ -137,11 +137,12 @@ const registerWorker = (params: {
}) => { }) => {
const config = GPUsConfigs[params.gpu]; const config = GPUsConfigs[params.gpu];
return `WORKER_NAME="gpustack-worker" \\ return `WORKER_NAME="gpustack-worker" \\
WORKER_PORT="80" \\
WORKER_IP="" \\ WORKER_IP="" \\
docker run -d --name \${WORKER_NAME} \\ docker run -d --name \${WORKER_NAME} \\
--restart=unless-stopped \\ --restart=unless-stopped \\
--privileged \\ --privileged \\
--net=host \\ --publish \${WORKER_PORT}:\${WORKER_PORT} \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\
--volume /var/run/docker.sock:/var/run/docker.sock \\ --volume /var/run/docker.sock:/var/run/docker.sock \\
@@ -150,7 +151,8 @@ docker run -d --name \${WORKER_NAME} \\
${params.image} \\ ${params.image} \\
--server-url ${params.server} \\ --server-url ${params.server} \\
--token ${params.token} \\ --token ${params.token} \\
--worker-ip \${WORKER_IP}`; --worker-port \${WORKER_PORT} \\
--advertise-address \${WORKER_IP}`;
}; };
// avaliable for Ascend // avaliable for Ascend
@@ -163,11 +165,12 @@ const registerAscendWorker = (params: {
}) => { }) => {
const config = GPUsConfigs[params.gpu]; const config = GPUsConfigs[params.gpu];
return `WORKER_NAME="gpustack-worker" \\ return `WORKER_NAME="gpustack-worker" \\
WORKER_PORT="80" \\
WORKER_IP="" \\ WORKER_IP="" \\
docker run -d --name \${WORKER_NAME} \\ docker run -d --name \${WORKER_NAME} \\
--restart=unless-stopped \\ --restart=unless-stopped \\
--privileged \\ --privileged \\
--net=host \\ --publish \${WORKER_PORT}:\${WORKER_PORT} \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\
--volume /var/run/docker.sock:/var/run/docker.sock \\ --volume /var/run/docker.sock:/var/run/docker.sock \\
@@ -177,7 +180,8 @@ docker run -d --name \${WORKER_NAME} \\
${params.image} \\ ${params.image} \\
--server-url ${params.server} \\ --server-url ${params.server} \\
--token ${params.token} \\ --token ${params.token} \\
--worker-ip \${WORKER_IP}`; --worker-port \${WORKER_PORT} \\
--advertise-address \${WORKER_IP}`;
}; };
const registerHygonWorker = (params: { const registerHygonWorker = (params: {
@@ -189,11 +193,12 @@ const registerHygonWorker = (params: {
}) => { }) => {
const config = GPUsConfigs[params.gpu]; const config = GPUsConfigs[params.gpu];
return `WORKER_NAME="gpustack-worker" \\ return `WORKER_NAME="gpustack-worker" \\
WORKER_PORT="80" \\
WORKER_IP="" \\ WORKER_IP="" \\
docker run -d --name \${WORKER_NAME} \\ docker run -d --name \${WORKER_NAME} \\
--restart=unless-stopped \\ --restart=unless-stopped \\
--privileged \\ --privileged \\
--net=host \\ --publish \${WORKER_PORT}:\${WORKER_PORT} \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\
--volume /var/run/docker.sock:/var/run/docker.sock \\ --volume /var/run/docker.sock:/var/run/docker.sock \\
@@ -205,7 +210,8 @@ docker run -d --name \${WORKER_NAME} \\
${params.image} \\ ${params.image} \\
--server-url ${params.server} \\ --server-url ${params.server} \\
--token ${params.token} \\ --token ${params.token} \\
--worker-ip \${WORKER_IP}`; --worker-port \${WORKER_PORT} \\
--advertise-address \${WORKER_IP}`;
}; };
const registerIluvatarWorker = (params: { const registerIluvatarWorker = (params: {
@@ -217,11 +223,12 @@ const registerIluvatarWorker = (params: {
}) => { }) => {
const config = GPUsConfigs[params.gpu]; const config = GPUsConfigs[params.gpu];
return `WORKER_NAME="gpustack-worker" \\ return `WORKER_NAME="gpustack-worker" \\
WORKER_PORT="80" \\
WORKER_IP="" \\ WORKER_IP="" \\
docker run -d --name \${WORKER_NAME} \\ docker run -d --name \${WORKER_NAME} \\
--restart=unless-stopped \\ --restart=unless-stopped \\
--privileged \\ --privileged \\
--net=host \\ --publish \${WORKER_PORT}:\${WORKER_PORT} \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\
--volume /var/run/docker.sock:/var/run/docker.sock \\ --volume /var/run/docker.sock:/var/run/docker.sock \\
@@ -232,7 +239,8 @@ docker run -d --name \${WORKER_NAME} \\
${params.image} \\ ${params.image} \\
--server-url ${params.server} \\ --server-url ${params.server} \\
--token ${params.token} \\ --token ${params.token} \\
--worker-ip \${WORKER_IP}`; --worker-port \${WORKER_PORT} \\
--advertise-address \${WORKER_IP}`;
}; };
const registerMetaXWorker = (params: { const registerMetaXWorker = (params: {
@@ -244,11 +252,12 @@ const registerMetaXWorker = (params: {
}) => { }) => {
const config = GPUsConfigs[params.gpu]; const config = GPUsConfigs[params.gpu];
return `WORKER_NAME="gpustack-worker" \\ return `WORKER_NAME="gpustack-worker" \\
WORKER_PORT="80" \\
WORKER_IP="" \\ WORKER_IP="" \\
docker run -d --name \${WORKER_NAME} \\ docker run -d --name \${WORKER_NAME} \\
--restart=unless-stopped \\ --restart=unless-stopped \\
--privileged \\ --privileged \\
--net=host \\ --publish \${WORKER_PORT}:\${WORKER_PORT} \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\
--volume /var/run/docker.sock:/var/run/docker.sock \\ --volume /var/run/docker.sock:/var/run/docker.sock \\
@@ -258,7 +267,8 @@ docker run -d --name \${WORKER_NAME} \\
${params.image} \\ ${params.image} \\
--server-url ${params.server} \\ --server-url ${params.server} \\
--token ${params.token} \\ --token ${params.token} \\
--worker-ip \${WORKER_IP}`; --worker-port \${WORKER_PORT} \\
--advertise-address \${WORKER_IP}`;
}; };
const registerCambriconWorker = (params: { const registerCambriconWorker = (params: {
@@ -270,11 +280,12 @@ const registerCambriconWorker = (params: {
}) => { }) => {
const config = GPUsConfigs[params.gpu]; const config = GPUsConfigs[params.gpu];
return `WORKER_NAME="gpustack-worker" \\ return `WORKER_NAME="gpustack-worker" \\
WORKER_PORT="80" \\
WORKER_IP="" \\ WORKER_IP="" \\
docker run -d --name \${WORKER_NAME} \\ docker run -d --name \${WORKER_NAME} \\
--restart=unless-stopped \\ --restart=unless-stopped \\
--privileged \\ --privileged \\
--net=host \\ --publish \${WORKER_PORT}:\${WORKER_PORT} \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\
--env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\
--volume /var/run/docker.sock:/var/run/docker.sock \\ --volume /var/run/docker.sock:/var/run/docker.sock \\
@@ -284,7 +295,8 @@ docker run -d --name \${WORKER_NAME} \\
${params.image} \\ ${params.image} \\
--server-url ${params.server} \\ --server-url ${params.server} \\
--token ${params.token} \\ --token ${params.token} \\
--worker-ip \${WORKER_IP}`; --worker-port \${WORKER_PORT} \\
--advertise-address \${WORKER_IP}`;
}; };
export const registerAddWokerCommandMap = { export const registerAddWokerCommandMap = {
@@ -311,9 +323,28 @@ export const AddWorkerDockerNotes: Record<string, string[]> = {
'clusters.addworker.nvidiaNotes-01', 'clusters.addworker.nvidiaNotes-01',
'clusters.addworker.nvidiaNotes-02' 'clusters.addworker.nvidiaNotes-02'
], ],
[GPUDriverMap.ASCEND]: [], [GPUDriverMap.ASCEND]: [
[GPUDriverMap.HYGON]: ['clusters.addworker.hygonNotes'], 'clusters.addworker.nvidiaNotes-01',
[GPUDriverMap.ILUVATAR]: ['clusters.addworker.corexNotes'], 'clusters.addworker.nvidiaNotes-02'
[GPUDriverMap.CAMBRICON]: ['clusters.addworker.cambriconNotes'], ],
[GPUDriverMap.METAX]: ['clusters.addworker.metaxNotes'] [GPUDriverMap.HYGON]: [
'clusters.addworker.nvidiaNotes-01',
'clusters.addworker.nvidiaNotes-02',
'clusters.addworker.hygonNotes'
],
[GPUDriverMap.ILUVATAR]: [
'clusters.addworker.nvidiaNotes-01',
'clusters.addworker.nvidiaNotes-02',
'clusters.addworker.corexNotes'
],
[GPUDriverMap.CAMBRICON]: [
'clusters.addworker.nvidiaNotes-01',
'clusters.addworker.nvidiaNotes-02',
'clusters.addworker.cambriconNotes'
],
[GPUDriverMap.METAX]: [
'clusters.addworker.nvidiaNotes-01',
'clusters.addworker.nvidiaNotes-02',
'clusters.addworker.metaxNotes'
]
}; };