Browse Source

feat: 修改计算资源

pull/181/head
cp3hnu 10 months ago
parent
commit
0fd5af7ee3
12 changed files with 42 additions and 92 deletions
  1. +21
    -14
      react-ui/src/hooks/resource.ts
  2. +5
    -18
      react-ui/src/pages/DevelopmentEnvironment/Create/index.tsx
  3. +1
    -11
      react-ui/src/pages/Experiment/components/ExperimentParameter/index.tsx
  4. +0
    -1
      react-ui/src/pages/Experiment/index.jsx
  5. +3
    -16
      react-ui/src/pages/HyperParameter/components/CreateForm/ExecuteConfig.tsx
  6. +2
    -2
      react-ui/src/pages/HyperParameter/components/HyperParameterBasic/index.tsx
  7. +1
    -1
      react-ui/src/pages/HyperParameter/types.ts
  8. +4
    -13
      react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx
  9. +1
    -1
      react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx
  10. +1
    -1
      react-ui/src/pages/ModelDeployment/components/VersionBasicInfo/index.tsx
  11. +1
    -1
      react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx
  12. +2
    -13
      react-ui/src/pages/Pipeline/components/PipelineNodeDrawer/index.tsx

+ 21
- 14
react-ui/src/hooks/resource.ts View File

@@ -12,6 +12,22 @@ import { useCallback, useEffect, useState } from 'react';


const computingResource: ComputingResource[] = []; const computingResource: ComputingResource[] = [];


// 过滤资源规格
export const filterResourceStandard: SelectProps<string, ComputingResource>['filterOption'] = (
input: string,
option?: ComputingResource,
) => {
return (
option?.computing_resource?.toLocaleLowerCase()?.includes(input.toLocaleLowerCase()) ?? false
);
};

// 资源规格字段
export const resourceFieldNames = {
label: 'description',
value: 'id',
};

// 获取资源规格 // 获取资源规格
export function useComputingResource() { export function useComputingResource() {
const [resourceStandardList, setResourceStandardList] = useState<ComputingResource[]>([]); const [resourceStandardList, setResourceStandardList] = useState<ComputingResource[]>([]);
@@ -25,7 +41,7 @@ export function useComputingResource() {
resource_type: '', resource_type: '',
}; };
const [res] = await to(getComputingResourceReq(params)); const [res] = await to(getComputingResourceReq(params));
if (res && res.data && res.data.content) {
if (res && res.data && Array.isArray(res.data.content)) {
setResourceStandardList(res.data.content); setResourceStandardList(res.data.content);
computingResource.splice(0, computingResource.length, ...res.data.content); computingResource.splice(0, computingResource.length, ...res.data.content);
} }
@@ -38,25 +54,16 @@ export function useComputingResource() {
} }
}, []); }, []);


// 过滤资源规格
const filterResourceStandard: SelectProps<string, ComputingResource>['filterOption'] =
useCallback((input: string, option?: ComputingResource) => {
return (
option?.computing_resource?.toLocaleLowerCase()?.includes(input.toLocaleLowerCase()) ??
false
);
}, []);

// 根据 standard 获取 description // 根据 standard 获取 description
const getDescription = useCallback( const getDescription = useCallback(
(standard?: string) => {
if (!standard) {
(id?: string | number) => {
if (!id) {
return undefined; return undefined;
} }
return resourceStandardList.find((item) => item.standard === standard)?.description;
return resourceStandardList.find((item) => Number(item.id) === Number(id))?.description;
}, },
[resourceStandardList], [resourceStandardList],
); );


return [resourceStandardList, filterResourceStandard, getDescription] as const;
return [resourceStandardList, getDescription] as const;
} }

+ 5
- 18
react-ui/src/pages/DevelopmentEnvironment/Create/index.tsx View File

@@ -6,17 +6,17 @@
import KFIcon from '@/components/KFIcon'; import KFIcon from '@/components/KFIcon';
import KFRadio, { type KFRadioItem } from '@/components/KFRadio'; import KFRadio, { type KFRadioItem } from '@/components/KFRadio';
import PageTitle from '@/components/PageTitle'; import PageTitle from '@/components/PageTitle';
import ParameterSelect from '@/components/ParameterSelect';
import ResourceSelect, { import ResourceSelect, {
requiredValidator, requiredValidator,
ResourceSelectorType, ResourceSelectorType,
type ParameterInputObject, type ParameterInputObject,
} from '@/components/ResourceSelect'; } from '@/components/ResourceSelect';
import SubAreaTitle from '@/components/SubAreaTitle'; import SubAreaTitle from '@/components/SubAreaTitle';
import { useComputingResource } from '@/hooks/resource';
import { createEditorReq } from '@/services/developmentEnvironment'; import { createEditorReq } from '@/services/developmentEnvironment';
import { to } from '@/utils/promise'; import { to } from '@/utils/promise';
import { useNavigate } from '@umijs/max'; import { useNavigate } from '@umijs/max';
import { App, Button, Col, Form, Input, Row, Select } from 'antd';
import { App, Button, Col, Form, Input, Row } from 'antd';
import { omit, pick } from 'lodash'; import { omit, pick } from 'lodash';
import styles from './index.less'; import styles from './index.less';


@@ -51,7 +51,6 @@ function EditorCreate() {
const navigate = useNavigate(); const navigate = useNavigate();
const [form] = Form.useForm(); const [form] = Form.useForm();
const { message } = App.useApp(); const { message } = App.useApp();
const [resourceStandardList, filterResourceStandard] = useComputingResource();


// 创建编辑器 // 创建编辑器
const createEditor = async (formData: FormData) => { const createEditor = async (formData: FormData) => {
@@ -62,8 +61,8 @@ function EditorCreate() {
const params = { const params = {
...omit(formData, ['image', 'model', 'dataset']), ...omit(formData, ['image', 'model', 'dataset']),
image: image.value, image: image.value,
model: pick(model, ['id', 'version', 'path', 'showValue']),
dataset: pick(dataset, ['id', 'version', 'path', 'showValue']),
model: model && pick(model, ['id', 'version', 'path', 'showValue']),
dataset: dataset && pick(dataset, ['id', 'version', 'path', 'showValue']),
}; };
const [res] = await to(createEditorReq(params)); const [res] = await to(createEditorReq(params));
if (res) { if (res) {
@@ -146,16 +145,7 @@ function EditorCreate() {
}, },
]} ]}
> >
<Select
showSearch
placeholder="请选择资源规格"
filterOption={filterResourceStandard}
options={resourceStandardList}
fieldNames={{
label: 'description',
value: 'standard',
}}
/>
<ParameterSelect dataType="resource" placeholder="请选择资源规格" />
</Form.Item> </Form.Item>
</Col> </Col>
</Row> </Row>
@@ -181,7 +171,6 @@ function EditorCreate() {
type={ResourceSelectorType.Mirror} type={ResourceSelectorType.Mirror}
placeholder="请选择镜像" placeholder="请选择镜像"
canInput={false} canInput={false}
size="large"
/> />
</Form.Item> </Form.Item>
</Col> </Col>
@@ -193,7 +182,6 @@ function EditorCreate() {
type={ResourceSelectorType.Model} type={ResourceSelectorType.Model}
placeholder="请选择模型" placeholder="请选择模型"
canInput={false} canInput={false}
size="large"
/> />
</Form.Item> </Form.Item>
</Col> </Col>
@@ -205,7 +193,6 @@ function EditorCreate() {
type={ResourceSelectorType.Dataset} type={ResourceSelectorType.Dataset}
placeholder="请选择数据集" placeholder="请选择数据集"
canInput={false} canInput={false}
size="large"
/> />
</Form.Item> </Form.Item>
</Col> </Col>


+ 1
- 11
react-ui/src/pages/Experiment/components/ExperimentParameter/index.tsx View File

@@ -1,7 +1,6 @@
import FormInfo from '@/components/FormInfo'; import FormInfo from '@/components/FormInfo';
import ParameterSelect from '@/components/ParameterSelect'; import ParameterSelect from '@/components/ParameterSelect';
import SubAreaTitle from '@/components/SubAreaTitle'; import SubAreaTitle from '@/components/SubAreaTitle';
import { useComputingResource } from '@/hooks/resource';
import { PipelineNodeModelSerialize } from '@/types'; import { PipelineNodeModelSerialize } from '@/types';
import { Form } from 'antd'; import { Form } from 'antd';
import styles from './index.less'; import styles from './index.less';
@@ -11,8 +10,6 @@ type ExperimentParameterProps = {
}; };


function ExperimentParameter({ nodeData }: ExperimentParameterProps) { function ExperimentParameter({ nodeData }: ExperimentParameterProps) {
const [resourceStandardList] = useComputingResource(); // 资源规模

// 控制策略 // 控制策略
const controlStrategyList = Object.entries(nodeData.control_strategy ?? {}).map( const controlStrategyList = Object.entries(nodeData.control_strategy ?? {}).map(
([key, value]) => ({ key, value }), ([key, value]) => ({ key, value }),
@@ -112,14 +109,7 @@ function ExperimentParameter({ nodeData }: ExperimentParameterProps) {
}, },
]} ]}
> >
<FormInfo
select
options={resourceStandardList}
fieldNames={{
label: 'description',
value: 'standard',
}}
/>
<ParameterSelect dataType="resource" placeholder="请选择资源规格" display />
</Form.Item> </Form.Item>
<Form.Item label="挂载路径" name="mount_path"> <Form.Item label="挂载路径" name="mount_path">
<FormInfo /> <FormInfo />


+ 0
- 1
react-ui/src/pages/Experiment/index.jsx View File

@@ -277,7 +277,6 @@ function Experiment() {
current, current,
pageSize, pageSize,
}); });
getExperimentList();
}; };
// 运行实验 // 运行实验
const runExperiment = async (id) => { const runExperiment = async (id) => {


+ 3
- 16
react-ui/src/pages/HyperParameter/components/CreateForm/ExecuteConfig.tsx View File

@@ -1,12 +1,12 @@
import CodeSelect from '@/components/CodeSelect'; import CodeSelect from '@/components/CodeSelect';
import KFIcon from '@/components/KFIcon'; import KFIcon from '@/components/KFIcon';
import ParameterSelect from '@/components/ParameterSelect';
import ResourceSelect, { import ResourceSelect, {
ResourceSelectorType, ResourceSelectorType,
requiredValidator, requiredValidator,
} from '@/components/ResourceSelect'; } from '@/components/ResourceSelect';
import SubAreaTitle from '@/components/SubAreaTitle'; import SubAreaTitle from '@/components/SubAreaTitle';
import { hyperParameterOptimizedModeOptions } from '@/enums'; import { hyperParameterOptimizedModeOptions } from '@/enums';
import { useComputingResource } from '@/hooks/resource';
import { isEmpty } from '@/utils'; import { isEmpty } from '@/utils';
import { modalConfirm, removeFormListItem } from '@/utils/ui'; import { modalConfirm, removeFormListItem } from '@/utils/ui';
import { MinusCircleOutlined, PlusCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import { MinusCircleOutlined, PlusCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
@@ -86,7 +86,6 @@ function ExecuteConfig() {
const searchAlgorithm = Form.useWatch('search_alg', form); const searchAlgorithm = Form.useWatch('search_alg', form);
const paramsTypeOptions = searchAlgorithm === 'Ax' ? axParameterOptions : parameterOptions; const paramsTypeOptions = searchAlgorithm === 'Ax' ? axParameterOptions : parameterOptions;
const paramsTypeTooltip = searchAlgorithm === 'Ax' ? axParameterTooltip : parameterTooltip; const paramsTypeTooltip = searchAlgorithm === 'Ax' ? axParameterTooltip : parameterTooltip;
const [resourceStandardList, filterResourceStandard] = useComputingResource();


const handleSearchAlgorithmChange = (value: string) => { const handleSearchAlgorithmChange = (value: string) => {
if ( if (
@@ -157,7 +156,6 @@ function ExecuteConfig() {
type={ResourceSelectorType.Mirror} type={ResourceSelectorType.Mirror}
placeholder="请选择镜像" placeholder="请选择镜像"
canInput={false} canInput={false}
size="large"
/> />
</Form.Item> </Form.Item>
</Col> </Col>
@@ -180,7 +178,6 @@ function ExecuteConfig() {
type={ResourceSelectorType.Dataset} type={ResourceSelectorType.Dataset}
placeholder="请选择数据集" placeholder="请选择数据集"
canInput={false} canInput={false}
size="large"
/> />
</Form.Item> </Form.Item>
</Col> </Col>
@@ -193,7 +190,6 @@ function ExecuteConfig() {
type={ResourceSelectorType.Model} type={ResourceSelectorType.Model}
placeholder="请选择模型" placeholder="请选择模型"
canInput={false} canInput={false}
size="large"
/> />
</Form.Item> </Form.Item>
</Col> </Col>
@@ -596,7 +592,7 @@ function ExecuteConfig() {
<Col span={10}> <Col span={10}>
<Form.Item <Form.Item
label="资源规格" label="资源规格"
name="resource"
name="computing_resource_id"
rules={[ rules={[
{ {
required: true, required: true,
@@ -604,16 +600,7 @@ function ExecuteConfig() {
}, },
]} ]}
> >
<Select
showSearch
placeholder="请选择资源规格"
filterOption={filterResourceStandard}
options={resourceStandardList}
fieldNames={{
label: 'description',
value: 'standard',
}}
/>
<ParameterSelect dataType="resource" placeholder="请选择资源规格" />
</Form.Item> </Form.Item>
</Col> </Col>
</Row> </Row>


+ 2
- 2
react-ui/src/pages/HyperParameter/components/HyperParameterBasic/index.tsx View File

@@ -41,7 +41,7 @@ function HyperParameterBasic({
runStatus, runStatus,
isInstance = false, isInstance = false,
}: HyperParameterBasicProps) { }: HyperParameterBasicProps) {
const getResourceDescription = useComputingResource()[2];
const getResourceDescription = useComputingResource()[1];


const basicDatas: BasicInfoData[] = useMemo(() => { const basicDatas: BasicInfoData[] = useMemo(() => {
if (!info) { if (!info) {
@@ -136,7 +136,7 @@ function HyperParameterBasic({
}, },
{ {
label: '资源规格', label: '资源规格',
value: info.resource,
value: info.computing_resource_id,
format: getResourceDescription, format: getResourceDescription,
}, },
]; ];


+ 1
- 1
react-ui/src/pages/HyperParameter/types.ts View File

@@ -24,7 +24,7 @@ export type FormData = {
num_samples: number; // 总试验次数 num_samples: number; // 总试验次数
max_t: number; // 单次试验最大时间 max_t: number; // 单次试验最大时间
min_samples_required: number; // 计算中位数的最小试验数 min_samples_required: number; // 计算中位数的最小试验数
resource: string; // 资源规格
computing_resource_id: number; // 资源规格
parameters: FormParameter[]; parameters: FormParameter[];
points_to_evaluate: { [key: string]: any }[]; points_to_evaluate: { [key: string]: any }[];
}; };


+ 4
- 13
react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx View File

@@ -5,13 +5,13 @@
*/ */
import CodeSelect from '@/components/CodeSelect'; import CodeSelect from '@/components/CodeSelect';
import PageTitle from '@/components/PageTitle'; import PageTitle from '@/components/PageTitle';
import ParameterSelect from '@/components/ParameterSelect';
import ResourceSelect, { import ResourceSelect, {
ResourceSelectorType, ResourceSelectorType,
requiredValidator, requiredValidator,
type ParameterInputObject, type ParameterInputObject,
} from '@/components/ResourceSelect'; } from '@/components/ResourceSelect';
import SubAreaTitle from '@/components/SubAreaTitle'; import SubAreaTitle from '@/components/SubAreaTitle';
import { useComputingResource } from '@/hooks/resource';
import { import {
createServiceVersionReq, createServiceVersionReq,
getServiceInfoReq, getServiceInfoReq,
@@ -23,7 +23,7 @@ import SessionStorage from '@/utils/sessionStorage';
import { removeFormListItem } from '@/utils/ui'; import { removeFormListItem } from '@/utils/ui';
import { MinusCircleOutlined, PlusCircleOutlined, PlusOutlined } from '@ant-design/icons'; import { MinusCircleOutlined, PlusCircleOutlined, PlusOutlined } from '@ant-design/icons';
import { useNavigate, useParams } from '@umijs/max'; import { useNavigate, useParams } from '@umijs/max';
import { App, Button, Col, Flex, Form, Input, InputNumber, Row, Select } from 'antd';
import { App, Button, Col, Flex, Form, Input, InputNumber, Row } from 'antd';
import { omit, pick } from 'lodash'; import { omit, pick } from 'lodash';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { CreateServiceVersionFrom, ServiceOperationType, ServiceVersionData } from '../types'; import { CreateServiceVersionFrom, ServiceOperationType, ServiceVersionData } from '../types';
@@ -51,7 +51,7 @@ type ServiceVersionCache = ServiceVersionData & {
function CreateServiceVersion() { function CreateServiceVersion() {
const navigate = useNavigate(); const navigate = useNavigate();
const [form] = Form.useForm(); const [form] = Form.useForm();
const [resourceStandardList, filterResourceStandard] = useComputingResource();
const [operationType, setOperationType] = useState(ServiceOperationType.Create); const [operationType, setOperationType] = useState(ServiceOperationType.Create);
const [lastPage, setLastPage] = useState(CreateServiceVersionFrom.ServiceInfo); const [lastPage, setLastPage] = useState(CreateServiceVersionFrom.ServiceInfo);
const { message } = App.useApp(); const { message } = App.useApp();
@@ -357,16 +357,7 @@ function CreateServiceVersion() {
}, },
]} ]}
> >
<Select
showSearch
placeholder="请选择资源规格"
filterOption={filterResourceStandard}
options={resourceStandardList}
fieldNames={{
label: 'description',
value: 'standard',
}}
/>
<ParameterSelect dataType="resource" placeholder="请选择资源规格" />
</Form.Item> </Form.Item>
</Col> </Col>
</Row> </Row>


+ 1
- 1
react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx View File

@@ -87,7 +87,7 @@ function ServiceInfo() {
format: formatDate, format: formatDate,
}, },
]; ];
const getResourceDescription = useComputingResource()[2];
const getResourceDescription = useComputingResource()[1];


// 获取服务详情 // 获取服务详情
const getServiceInfo = useCallback(async () => { const getServiceInfo = useCallback(async () => {


+ 1
- 1
react-ui/src/pages/ModelDeployment/components/VersionBasicInfo/index.tsx View File

@@ -36,7 +36,7 @@ const formatEnvText = (env?: Record<string, string>) => {
}; };


function VersionBasicInfo({ info }: BasicInfoProps) { function VersionBasicInfo({ info }: BasicInfoProps) {
const getResourceDescription = useComputingResource()[2];
const getResourceDescription = useComputingResource()[1];


const datas: BasicInfoData[] = [ const datas: BasicInfoData[] = [
{ {


+ 1
- 1
react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx View File

@@ -42,7 +42,7 @@ const formatEnvText = (env: Record<string, string>) => {


function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModalProps) { function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModalProps) {
const [compareData, setCompareData] = useState<CompareData | undefined>(undefined); const [compareData, setCompareData] = useState<CompareData | undefined>(undefined);
const getResourceDescription = useComputingResource()[2];
const getResourceDescription = useComputingResource()[1];


const fields: FiledType[] = useMemo( const fields: FiledType[] = useMemo(
() => [ () => [


+ 2
- 13
react-ui/src/pages/Pipeline/components/PipelineNodeDrawer/index.tsx View File

@@ -8,7 +8,6 @@ import ResourceSelectorModal, {
} from '@/components/ResourceSelectorModal'; } from '@/components/ResourceSelectorModal';
import SubAreaTitle from '@/components/SubAreaTitle'; import SubAreaTitle from '@/components/SubAreaTitle';
import { CommonTabKeys } from '@/enums'; import { CommonTabKeys } from '@/enums';
import { useComputingResource } from '@/hooks/resource';
import { canInput, createMenuItems } from '@/pages/Pipeline/Info/utils'; import { canInput, createMenuItems } from '@/pages/Pipeline/Info/utils';
import { import {
PipelineGlobalParam, PipelineGlobalParam,
@@ -19,7 +18,7 @@ import {
import { openAntdModal } from '@/utils/modal'; import { openAntdModal } from '@/utils/modal';
import { to } from '@/utils/promise'; import { to } from '@/utils/promise';
import { INode } from '@antv/g6'; import { INode } from '@antv/g6';
import { Button, Drawer, Form, Input, MenuProps, Select } from 'antd';
import { Button, Drawer, Form, Input, MenuProps } from 'antd';
import { NamePath } from 'antd/es/form/interface'; import { NamePath } from 'antd/es/form/interface';
import { forwardRef, useImperativeHandle, useState } from 'react'; import { forwardRef, useImperativeHandle, useState } from 'react';
import PropsLabel from '../PropsLabel'; import PropsLabel from '../PropsLabel';
@@ -36,7 +35,6 @@ const PipelineNodeParameter = forwardRef(({ onFormChange }: PipelineNodeParamete
{} as PipelineNodeModelSerialize, {} as PipelineNodeModelSerialize,
); );
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [resourceStandardList, filterResourceStandard] = useComputingResource(); // 资源规模
const [menuItems, setMenuItems] = useState<MenuProps['items']>([]); const [menuItems, setMenuItems] = useState<MenuProps['items']>([]);


const afterOpenChange = async () => { const afterOpenChange = async () => {
@@ -458,16 +456,7 @@ const PipelineNodeParameter = forwardRef(({ onFormChange }: PipelineNodeParamete
}, },
]} ]}
> >
<Select
placeholder="请选择资源规格"
filterOption={filterResourceStandard}
options={resourceStandardList}
fieldNames={{
label: 'description',
value: 'standard',
}}
showSearch
/>
<ParameterSelect dataType="resource" placeholder="请选择资源规格" />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="mount_path" name="mount_path"


Loading…
Cancel
Save