diff --git a/src/layouts/index.tsx b/src/layouts/index.tsx
index e91667b5..75b124a9 100644
--- a/src/layouts/index.tsx
+++ b/src/layouts/index.tsx
@@ -45,8 +45,7 @@ const NO_CONTAINER_PAGES = [
'image',
'text2images',
'clusterDetail',
- 'clusterCreate',
- 'workers'
+ 'clusterCreate'
];
const loginPath = DEFAULT_ENTER_PAGE.login;
diff --git a/src/locales/en-US/clusters.ts b/src/locales/en-US/clusters.ts
index 70fb83ed..95c7184d 100644
--- a/src/locales/en-US/clusters.ts
+++ b/src/locales/en-US/clusters.ts
@@ -75,7 +75,7 @@ Same applies to the /opt/dtk directory.`,
'clusters.addworker.extraVolume': 'Additional Volume Mount',
'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
'clusters.addworker.cacheVolume.tips':
- 'If you want to custom the model cache directory, you can specify the path to mount it.',
+ 'If you want to customize the model cache directory, you can specify the path to mount it.',
'clusters.addworker.configSummary': 'Configuration Summary',
'clusters.addworker.gpuVendor': 'GPU Vendor',
'clusters.addworker.workerIP': 'Worker IP',
diff --git a/src/locales/ja-JP/clusters.ts b/src/locales/ja-JP/clusters.ts
index 0a695984..540396b7 100644
--- a/src/locales/ja-JP/clusters.ts
+++ b/src/locales/ja-JP/clusters.ts
@@ -75,7 +75,7 @@ Same applies to the /opt/dtk directory.`,
'clusters.addworker.extraVolume': 'Additional Volume Mount',
'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
'clusters.addworker.cacheVolume.tips':
- 'If you want to custom the model cache directory, you can specify the path to mount it.',
+ 'If you want to customize the model cache directory, you can specify the path to mount it.',
'clusters.addworker.configSummary': 'Configuration Summary',
'clusters.addworker.gpuVendor': 'GPU Vendor',
'clusters.addworker.workerIP': 'Worker IP',
@@ -163,6 +163,6 @@ Same applies to the /opt/dtk directory.`,
// 69. 'clusters.button.genToken': 'Need to create a new token? Click here.',
// 70. 'clusters.addworker.amdNotes-01': `If the /opt/rocm directory does not exist, please create a symbolic link pointing to the ROCm installed path: ln -s /path/to/rocm /opt/rocm.`,
// 71. 'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
-// 72. 'clusters.addworker.cacheVolume.tips': 'If you want to custom the model cache directory, you can specify the path to mount it.',
+// 72. 'clusters.addworker.cacheVolume.tips': 'If you want to customize the model cache directory, you can specify the path to mount it.',
// 73. 'clusters.addworker.cacheVolume.holder': 'e.g. /data/cache (path must start with /)',
// ========== End of To-Do List ==========
diff --git a/src/locales/ru-RU/clusters.ts b/src/locales/ru-RU/clusters.ts
index 7d859247..f36868cd 100644
--- a/src/locales/ru-RU/clusters.ts
+++ b/src/locales/ru-RU/clusters.ts
@@ -75,7 +75,7 @@ export default {
'clusters.addworker.extraVolume': 'Дополнительное монтирование тома',
'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
'clusters.addworker.cacheVolume.tips':
- 'If you want to custom the model cache directory, you can specify the path to mount it.',
+ 'If you want to customize the model cache directory, you can specify the path to mount it.',
'clusters.addworker.configSummary': 'Сводка конфигурации',
'clusters.addworker.gpuVendor': 'Производитель GPU',
'clusters.addworker.workerIP': 'IP воркера',
@@ -95,5 +95,5 @@ export default {
// 1. 'clusters.addworker.amdNotes-01': `If the /opt/rocm directory does not exist, please create a symbolic link pointing to the ROCm installed path: ln -s /path/to/rocm /opt/rocm.`,
// 2. 'clusters.button.genToken': 'Need to create a new token? Click here.',
// 3. 'clusters.addworker.cacheVolume': 'Model Cache Volume Mount',
-// 4. 'clusters.addworker.cacheVolume.tips': 'If you want to custom the model cache directory, you can specify the path to mount it.',
+// 4. 'clusters.addworker.cacheVolume.tips': 'If you want to customize the model cache directory, you can specify the path to mount it.',
// ================================================================
diff --git a/src/pages/cluster-management/components/add-worker/add-worker-context.ts b/src/pages/cluster-management/components/add-worker/add-worker-context.ts
index 5d3d08f0..5d96e9de 100644
--- a/src/pages/cluster-management/components/add-worker/add-worker-context.ts
+++ b/src/pages/cluster-management/components/add-worker/add-worker-context.ts
@@ -5,6 +5,7 @@ import { SummaryDataKey } from './config';
interface AddWorkerContextProps {
clusterList?: Global.BaseOption[];
+ clusterLoading?: boolean;
provider: ProviderType;
stepList: string[];
onClusterChange?: (value: number, row?: any) => void;
diff --git a/src/pages/cluster-management/components/add-worker/add-worker-step.tsx b/src/pages/cluster-management/components/add-worker/add-worker-step.tsx
index 431f3971..792eb704 100644
--- a/src/pages/cluster-management/components/add-worker/add-worker-step.tsx
+++ b/src/pages/cluster-management/components/add-worker/add-worker-step.tsx
@@ -30,6 +30,7 @@ const Container = styled.div`
type AddWorkerProps = {
provider: ProviderType;
clusterList?: Global.BaseOption[];
+ clusterLoading?: boolean;
stepList: StepName[];
onClusterChange?: (value: number, row?: any) => void;
registrationInfo: {
@@ -50,6 +51,7 @@ const AddWorkerSteps: React.FC = (props) => {
registrationInfo,
provider,
clusterList,
+ clusterLoading,
stepList = [],
onClusterChange
} = props || {};
@@ -77,6 +79,7 @@ const AddWorkerSteps: React.FC = (props) => {
[];
+ clusterLoading?: boolean;
stepList: StepName[];
onClusterChange?: (value: number, row?: any) => void;
onCancel: () => void;
@@ -47,6 +37,7 @@ const AddWorker: React.FC = (props) => {
cluster_id,
title,
clusterList,
+ clusterLoading,
stepList = []
} = props || {};
const firstLoad = React.useRef(true);
@@ -103,6 +94,7 @@ const AddWorker: React.FC = (props) => {
stepList={stepList}
provider={provider}
clusterList={clusterList}
+ clusterLoading={clusterLoading}
onClusterChange={handleOnClusterChange}
registrationInfo={registrationInfo}
>
diff --git a/src/pages/cluster-management/components/add-worker/select-cluster.tsx b/src/pages/cluster-management/components/add-worker/select-cluster.tsx
index 4a7d552b..c09f6cca 100644
--- a/src/pages/cluster-management/components/add-worker/select-cluster.tsx
+++ b/src/pages/cluster-management/components/add-worker/select-cluster.tsx
@@ -1,5 +1,6 @@
import BaseSelect from '@/components/seal-form/base/select';
import { useIntl } from '@umijs/max';
+import { Spin } from 'antd';
import { useEffect } from 'react';
import { useAddWorkerContext } from './add-worker-context';
import { StepNamesMap } from './config';
@@ -9,6 +10,7 @@ import StepCollapse from './step-collapse';
const SelectCluster = () => {
const {
clusterList,
+ clusterLoading,
registrationInfo,
stepList,
summary,
@@ -55,13 +57,15 @@ const SelectCluster = () => {
}
>
-
+
+
+
);
};
diff --git a/src/pages/cluster-management/components/footer-buttons.tsx b/src/pages/cluster-management/components/footer-buttons.tsx
index 2c5716aa..57678009 100644
--- a/src/pages/cluster-management/components/footer-buttons.tsx
+++ b/src/pages/cluster-management/components/footer-buttons.tsx
@@ -43,7 +43,7 @@ const FooterButtons: React.FC = (props) => {
)}
{showButtons.skip && (
)}
{showButtons.save && (
diff --git a/src/pages/cluster-management/hooks/use-add-worker.tsx b/src/pages/cluster-management/hooks/use-add-worker.tsx
index 798ffddc..7edc1a4f 100644
--- a/src/pages/cluster-management/hooks/use-add-worker.tsx
+++ b/src/pages/cluster-management/hooks/use-add-worker.tsx
@@ -11,10 +11,11 @@ import {
import { ClusterListItem } from '../config/types';
const useAddWorker = (props: {
+ clusterLoading?: boolean;
clusterList?: Global.BaseOption[];
}) => {
const intl = useIntl();
- const { clusterList } = props || {};
+ const { clusterList, clusterLoading } = props || {};
const [stepList, setStepList] = useState([]);
const [openAddWorker, setOpenAddWorker] = useState<{
open: boolean;
@@ -73,6 +74,7 @@ const useAddWorker = (props: {
open={openAddWorker.open}
provider={openAddWorker.provider}
clusterList={clusterDataList}
+ clusterLoading={clusterLoading}
cluster_id={openAddWorker.cluster_id}
onClusterChange={handleClusterChange}
onCancel={() =>
diff --git a/src/pages/llmodels/apis/index.ts b/src/pages/llmodels/apis/index.ts
index c25b4824..24b7ad9a 100644
--- a/src/pages/llmodels/apis/index.ts
+++ b/src/pages/llmodels/apis/index.ts
@@ -56,7 +56,7 @@ export async function queryModelsList(
return request>(
`${MODELS_API}?${qs.stringify(params)}`,
{
- methos: 'GET',
+ method: 'GET',
...options
}
);
@@ -360,7 +360,7 @@ export async function queryCatalogList(
return request>(
`/model-sets?${qs.stringify(params)}`,
{
- methos: 'GET',
+ method: 'GET',
...options
}
);
diff --git a/src/pages/resources/apis/index.ts b/src/pages/resources/apis/index.ts
index 69dd9298..daa0c10a 100644
--- a/src/pages/resources/apis/index.ts
+++ b/src/pages/resources/apis/index.ts
@@ -52,14 +52,14 @@ export async function queryWorkersList>(
export async function queryGpuDevicesList(params: Global.SearchParams) {
return request>(`${GPU_DEVICES_API}`, {
- methos: 'GET',
+ method: 'GET',
params
});
}
export async function queryGPUDeviceItem(id: string) {
return request(`${GPU_DEVICES_API}/${id}`, {
- methos: 'GET'
+ method: 'GET'
});
}
diff --git a/src/pages/resources/components/workers.tsx b/src/pages/resources/components/workers.tsx
index d1463605..ade364ca 100644
--- a/src/pages/resources/components/workers.tsx
+++ b/src/pages/resources/components/workers.tsx
@@ -1,7 +1,7 @@
import DeleteModal from '@/components/delete-modal';
import { FilterBar } from '@/components/page-tools';
import useTableFetch from '@/hooks/use-table-fetch';
-import { PageContainerInner } from '@/pages/_components/page-box';
+import PageBox from '@/pages/_components/page-box';
import { queryClusterList } from '@/pages/cluster-management/apis';
import { DockerStepsFromWorker } from '@/pages/cluster-management/components/add-worker/config';
import {
@@ -65,9 +65,11 @@ const Workers: React.FC = () => {
});
const [clusterData, setClusterData] = useState<{
list: Global.BaseOption[];
+ loading: boolean;
data: Record;
}>({
list: [],
+ loading: false,
data: {}
});
const [workerDetailStatus, setWorkerDetailStatus] = useState<{
@@ -78,7 +80,8 @@ const Workers: React.FC = () => {
currentData: null
});
const { handleAddWorker, AddWorkerModal, setStepList } = useAddWorker({
- clusterList: clusterData.list
+ clusterList: clusterData.list,
+ clusterLoading: clusterData.loading
});
const getClusterList = async () => {
@@ -103,11 +106,13 @@ const Workers: React.FC = () => {
}));
setClusterData({
list,
+ loading: false,
data: clusterMap
});
} catch (error) {
setClusterData({
list: [],
+ loading: false,
data: {}
});
}
@@ -243,9 +248,7 @@ const Workers: React.FC = () => {
return (
<>
-
+
{
/>
{MaintenanceModal}
{AddWorkerModal}
-
+
>
);
};
diff --git a/src/pages/resources/config/gpu-driver.ts b/src/pages/resources/config/gpu-driver.ts
index d542e757..adc07e15 100644
--- a/src/pages/resources/config/gpu-driver.ts
+++ b/src/pages/resources/config/gpu-driver.ts
@@ -81,7 +81,10 @@ const generateNvidiaDockerEnvCommand = (config: {
runtime: string;
driver: string;
}) => {
- return `${config.driver} >/dev/null 2>&1 && echo "${config.label} driver OK" || (echo "${config.label} driver issue"; exit 1) && sudo docker info 2>/dev/null | grep -q "${config.runtime}" && echo "${config.label} Container Toolkit OK" || (echo "${config.label} Container Toolkit not configured"; exit 1)`;
+ const runtimeCheck =
+ config.runtime === 'nvidia' ? 'Runtime.*nvidia' : config.runtime;
+
+ return `${config.driver} >/dev/null 2>&1 && echo "${config.label} driver OK" || (echo "${config.label} driver issue"; exit 1) && sudo docker info 2>/dev/null | grep -q "${runtimeCheck}" && echo "${config.label} Container Toolkit OK" || (echo "${config.label} Container Toolkit not configured"; exit 1)`;
};
// avaliable for Hygon、Iluvatar、MetaX 、Cambricon
@@ -127,15 +130,16 @@ export const dockerEnvCommandMap = {
)
};
const setNormalArgs = (params: any) => {
- console.log('params++++++++++++++', params);
- return `sudo docker run -d --name gpustack-worker \\
- --restart=unless-stopped \\
- --privileged \\
- --network=host \\
- --volume /var/run/docker.sock:/var/run/docker.sock \\
- --volume gpustack-data:/var/lib/gpustack \\
- ${params.modelDir ? `--volume ${params.modelDir}:${params.modelDir} \\` : ''}
- ${params.cacheDir ? `--volume ${params.cacheDir}:/var/lib/gpustack/cache \\` : ''}`;
+ return `CONTAINER_NAME="gpustack-worker" \\
+sudo docker run -d --name \${CONTAINER_NAME} \\
+ -e GPUSTACK_RUNTIME_DEPLOY_MIRRORED_NAME=\${CONTAINER_NAME} \\
+ --restart=unless-stopped \\
+ --privileged \\
+ --network=host \\
+ --volume /var/run/docker.sock:/var/run/docker.sock \\
+ --volume gpustack-data:/var/lib/gpustack \\
+ ${params.modelDir ? `--volume ${params.modelDir}:${params.modelDir} \\` : ''}
+ ${params.cacheDir ? `--volume ${params.cacheDir}:/var/lib/gpustack/cache \\` : ''}`;
};
const setImageArgs = (params: any) => {
diff --git a/src/pages/users/apis/index.ts b/src/pages/users/apis/index.ts
index ce7d26d1..65030d05 100644
--- a/src/pages/users/apis/index.ts
+++ b/src/pages/users/apis/index.ts
@@ -5,7 +5,7 @@ export const USERS_API = '/users';
export async function queryUsersList(params: Global.SearchParams) {
return request>(`${USERS_API}`, {
- methos: 'GET',
+ method: 'GET',
params
});
}