From fadff34f5fe49c66bd2a9b033531d680e3da1489 Mon Sep 17 00:00:00 2001 From: jialin Date: Thu, 6 Nov 2025 17:26:55 +0800 Subject: [PATCH] chore: update description for adding worker --- src/locales/en-US/dashboard.ts | 1 + src/locales/ja-JP/dashboard.ts | 6 +- src/locales/ru-RU/dashboard.ts | 5 +- src/locales/zh-CN/dashboard.ts | 1 + .../components/add-worker-step.tsx | 3 +- src/pages/dashboard/components/over-view.tsx | 4 +- src/pages/dashboard/config/index.ts | 5 ++ src/pages/llmodels/forms/kv-cache.tsx | 15 ++++- src/pages/resources/config/gpu-driver.ts | 65 ++++++++++++++----- 9 files changed, 79 insertions(+), 26 deletions(-) diff --git a/src/locales/en-US/dashboard.ts b/src/locales/en-US/dashboard.ts index 7ce06119..c79543f1 100644 --- a/src/locales/en-US/dashboard.ts +++ b/src/locales/en-US/dashboard.ts @@ -2,6 +2,7 @@ export default { 'dashboard.title': 'Dashboard', 'dashboard.workers': 'Workers', 'dashboard.models': 'Models', + 'dashboard.clusters': 'Clusters', 'dashboard.totalgpus': 'GPUs', 'dashboard.allocategpus': 'Allocated GPUs', 'dashboard.instances': 'Instances', diff --git a/src/locales/ja-JP/dashboard.ts b/src/locales/ja-JP/dashboard.ts index 6359ab73..435e75b7 100644 --- a/src/locales/ja-JP/dashboard.ts +++ b/src/locales/ja-JP/dashboard.ts @@ -30,7 +30,8 @@ export default { 'dashboard.usage.export.date': 'Date', 'dashboard.usage.datePicker.last7days': 'Last 7 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) ========== @@ -42,5 +43,6 @@ export default { // 6. 'dashboard.usage.export.date': 'Date', // 7. 'dashboard.usage.datePicker.last7days': 'Last 7 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 ========== diff --git a/src/locales/ru-RU/dashboard.ts b/src/locales/ru-RU/dashboard.ts index 06af5832..e0d5db93 100644 --- a/src/locales/ru-RU/dashboard.ts +++ b/src/locales/ru-RU/dashboard.ts @@ -30,9 +30,10 @@ export default { 'dashboard.usage.export.date': 'Дата', 'dashboard.usage.datePicker.last7days': 'Последние 7 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) ========== - +// 1. 'dashboard.clusters': 'Clusters', // ========== End of To-Do List ========== diff --git a/src/locales/zh-CN/dashboard.ts b/src/locales/zh-CN/dashboard.ts index 93bd096e..17f2d2d6 100644 --- a/src/locales/zh-CN/dashboard.ts +++ b/src/locales/zh-CN/dashboard.ts @@ -2,6 +2,7 @@ export default { 'dashboard.title': '概览', 'dashboard.workers': '节点', 'dashboard.models': '模型', + 'dashboard.clusters': '集群', 'dashboard.totalgpus': 'GPUs', 'dashboard.allocategpus': '已分配 GPU 数量', 'dashboard.instances': '实例', diff --git a/src/pages/cluster-management/components/add-worker-step.tsx b/src/pages/cluster-management/components/add-worker-step.tsx index a114b1b1..2eb12a2f 100644 --- a/src/pages/cluster-management/components/add-worker-step.tsx +++ b/src/pages/cluster-management/components/add-worker-step.tsx @@ -28,7 +28,7 @@ const NotesWrapper = styled.ol` font-weight: 400; margin: 0 !important; padding: 0 !important; - line-height: 1.2; + line-height: 1.25; li { margin-left: 12px !important; } @@ -156,6 +156,7 @@ const AddWorkerStep: React.FC = ({ {intl.formatMessage({ id: 'clusters.create.addCommand.tips' })} } diff --git a/src/pages/dashboard/components/over-view.tsx b/src/pages/dashboard/components/over-view.tsx index d3b3a8db..0ec4d233 100644 --- a/src/pages/dashboard/components/over-view.tsx +++ b/src/pages/dashboard/components/over-view.tsx @@ -58,8 +58,8 @@ const Overview: React.FC = () => { xs={{ flex: '100%' }} sm={{ flex: '50%' }} md={{ flex: '50%' }} - lg={{ flex: '25%' }} - xl={{ flex: '25%' }} + lg={{ flex: '20%' }} + xl={{ flex: '20%' }} key={config.key} > {renderCardItem({ diff --git a/src/pages/dashboard/config/index.ts b/src/pages/dashboard/config/index.ts index ca771d4e..0f8d93b3 100644 --- a/src/pages/dashboard/config/index.ts +++ b/src/pages/dashboard/config/index.ts @@ -1,4 +1,9 @@ export const overviewConfigs = [ + { + key: 'cluster_count', + label: 'dashboard.clusters', + backgroundColor: 'var(--color-white-1)' + }, { key: 'worker_count', label: 'dashboard.workers', diff --git a/src/pages/llmodels/forms/kv-cache.tsx b/src/pages/llmodels/forms/kv-cache.tsx index f404c3cc..53989902 100644 --- a/src/pages/llmodels/forms/kv-cache.tsx +++ b/src/pages/llmodels/forms/kv-cache.tsx @@ -15,7 +15,7 @@ const KVCacheForm = () => { const backend = Form.useWatch('backend', form); const configCacheRef = useRef({}); - const handleOnChange = async (e: any) => { + const handleEnableOnChange = async (e: any) => { if (e.target.checked) { form.setFieldsValue({ extended_kv_cache: { @@ -28,6 +28,17 @@ const KVCacheForm = () => { } else { 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(() => { @@ -56,7 +67,7 @@ const KVCacheForm = () => { id: 'models.form.kvCache.tips2' })} disabled={!builtInBackend} - onChange={handleOnChange} + onChange={handleEnableOnChange} label={intl.formatMessage({ id: 'models.form.extendedkvcache' })} > diff --git a/src/pages/resources/config/gpu-driver.ts b/src/pages/resources/config/gpu-driver.ts index 90b8d60e..4e2195df 100644 --- a/src/pages/resources/config/gpu-driver.ts +++ b/src/pages/resources/config/gpu-driver.ts @@ -137,11 +137,12 @@ const registerWorker = (params: { }) => { const config = GPUsConfigs[params.gpu]; return `WORKER_NAME="gpustack-worker" \\ +WORKER_PORT="80" \\ WORKER_IP="" \\ docker run -d --name \${WORKER_NAME} \\ --restart=unless-stopped \\ --privileged \\ - --net=host \\ + --publish \${WORKER_PORT}:\${WORKER_PORT} \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ @@ -150,7 +151,8 @@ docker run -d --name \${WORKER_NAME} \\ ${params.image} \\ --server-url ${params.server} \\ --token ${params.token} \\ - --worker-ip \${WORKER_IP}`; + --worker-port \${WORKER_PORT} \\ + --advertise-address \${WORKER_IP}`; }; // avaliable for Ascend @@ -163,11 +165,12 @@ const registerAscendWorker = (params: { }) => { const config = GPUsConfigs[params.gpu]; return `WORKER_NAME="gpustack-worker" \\ +WORKER_PORT="80" \\ WORKER_IP="" \\ docker run -d --name \${WORKER_NAME} \\ --restart=unless-stopped \\ --privileged \\ - --net=host \\ + --publish \${WORKER_PORT}:\${WORKER_PORT} \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ @@ -177,7 +180,8 @@ docker run -d --name \${WORKER_NAME} \\ ${params.image} \\ --server-url ${params.server} \\ --token ${params.token} \\ - --worker-ip \${WORKER_IP}`; + --worker-port \${WORKER_PORT} \\ + --advertise-address \${WORKER_IP}`; }; const registerHygonWorker = (params: { @@ -189,11 +193,12 @@ const registerHygonWorker = (params: { }) => { const config = GPUsConfigs[params.gpu]; return `WORKER_NAME="gpustack-worker" \\ +WORKER_PORT="80" \\ WORKER_IP="" \\ docker run -d --name \${WORKER_NAME} \\ --restart=unless-stopped \\ --privileged \\ - --net=host \\ + --publish \${WORKER_PORT}:\${WORKER_PORT} \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ @@ -205,7 +210,8 @@ docker run -d --name \${WORKER_NAME} \\ ${params.image} \\ --server-url ${params.server} \\ --token ${params.token} \\ - --worker-ip \${WORKER_IP}`; + --worker-port \${WORKER_PORT} \\ + --advertise-address \${WORKER_IP}`; }; const registerIluvatarWorker = (params: { @@ -217,11 +223,12 @@ const registerIluvatarWorker = (params: { }) => { const config = GPUsConfigs[params.gpu]; return `WORKER_NAME="gpustack-worker" \\ +WORKER_PORT="80" \\ WORKER_IP="" \\ docker run -d --name \${WORKER_NAME} \\ --restart=unless-stopped \\ --privileged \\ - --net=host \\ + --publish \${WORKER_PORT}:\${WORKER_PORT} \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ @@ -232,7 +239,8 @@ docker run -d --name \${WORKER_NAME} \\ ${params.image} \\ --server-url ${params.server} \\ --token ${params.token} \\ - --worker-ip \${WORKER_IP}`; + --worker-port \${WORKER_PORT} \\ + --advertise-address \${WORKER_IP}`; }; const registerMetaXWorker = (params: { @@ -244,11 +252,12 @@ const registerMetaXWorker = (params: { }) => { const config = GPUsConfigs[params.gpu]; return `WORKER_NAME="gpustack-worker" \\ +WORKER_PORT="80" \\ WORKER_IP="" \\ docker run -d --name \${WORKER_NAME} \\ --restart=unless-stopped \\ --privileged \\ - --net=host \\ + --publish \${WORKER_PORT}:\${WORKER_PORT} \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ @@ -258,7 +267,8 @@ docker run -d --name \${WORKER_NAME} \\ ${params.image} \\ --server-url ${params.server} \\ --token ${params.token} \\ - --worker-ip \${WORKER_IP}`; + --worker-port \${WORKER_PORT} \\ + --advertise-address \${WORKER_IP}`; }; const registerCambriconWorker = (params: { @@ -270,11 +280,12 @@ const registerCambriconWorker = (params: { }) => { const config = GPUsConfigs[params.gpu]; return `WORKER_NAME="gpustack-worker" \\ +WORKER_PORT="80" \\ WORKER_IP="" \\ docker run -d --name \${WORKER_NAME} \\ --restart=unless-stopped \\ --privileged \\ - --net=host \\ + --publish \${WORKER_PORT}:\${WORKER_PORT} \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_DEPLOYMENT=true" \\ --env "GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${WORKER_NAME}" \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ @@ -284,7 +295,8 @@ docker run -d --name \${WORKER_NAME} \\ ${params.image} \\ --server-url ${params.server} \\ --token ${params.token} \\ - --worker-ip \${WORKER_IP}`; + --worker-port \${WORKER_PORT} \\ + --advertise-address \${WORKER_IP}`; }; export const registerAddWokerCommandMap = { @@ -311,9 +323,28 @@ export const AddWorkerDockerNotes: Record = { 'clusters.addworker.nvidiaNotes-01', 'clusters.addworker.nvidiaNotes-02' ], - [GPUDriverMap.ASCEND]: [], - [GPUDriverMap.HYGON]: ['clusters.addworker.hygonNotes'], - [GPUDriverMap.ILUVATAR]: ['clusters.addworker.corexNotes'], - [GPUDriverMap.CAMBRICON]: ['clusters.addworker.cambriconNotes'], - [GPUDriverMap.METAX]: ['clusters.addworker.metaxNotes'] + [GPUDriverMap.ASCEND]: [ + 'clusters.addworker.nvidiaNotes-01', + 'clusters.addworker.nvidiaNotes-02' + ], + [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' + ] };