wenmeng.zwm yingda.chen 3 years ago
parent
commit
7fb25d7bbb
17 changed files with 51 additions and 66 deletions
  1. +0
    -13
      modelscope/models/nlp/star3/configuration_star3.py
  2. +11
    -33
      modelscope/models/nlp/star3/modeling_star3.py
  3. +1
    -3
      modelscope/models/nlp/table_question_answering.py
  4. +1
    -1
      modelscope/models/nlp/task_models/sequence_classification.py
  5. +1
    -1
      modelscope/pipelines/nlp/fill_mask_pipeline.py
  6. +1
    -1
      modelscope/pipelines/nlp/fill_mask_ponet_pipeline.py
  7. +1
    -1
      modelscope/pipelines/nlp/sequence_classification_pipeline_base.py
  8. +2
    -3
      modelscope/pipelines/nlp/table_question_answering_pipeline.py
  9. +1
    -1
      modelscope/pipelines/nlp/zero_shot_classification_pipeline.py
  10. +19
    -0
      modelscope/trainers/easycv/__init__.py
  11. +2
    -2
      modelscope/trainers/nlp/space/dialog_intent_trainer.py
  12. +1
    -1
      modelscope/trainers/trainer.py
  13. +3
    -0
      modelscope/utils/ast_utils.py
  14. +0
    -1
      modelscope/utils/nlp/nlp_utils.py
  15. +0
    -1
      tests/pipelines/test_table_question_answering.py
  16. +3
    -0
      tests/run_config.yaml
  17. +4
    -4
      tests/trainers/easycv/test_segformer.py

+ 0
- 13
modelscope/models/nlp/star3/configuration_star3.py View File

@@ -18,21 +18,8 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import copy import copy
import logging import logging
import math
import os
import shutil
import tarfile
import tempfile
from pathlib import Path
from typing import Union


import json import json
import numpy as np
import torch
import torch_scatter
from icecream import ic
from torch import nn
from torch.nn import CrossEntropyLoss


logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)




+ 11
- 33
modelscope/models/nlp/star3/modeling_star3.py View File

@@ -17,21 +17,15 @@


from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import copy import copy
import logging
import math import math
import os import os
import shutil import shutil
import tarfile import tarfile
import tempfile import tempfile
from pathlib import Path
from typing import Union


import json
import numpy as np import numpy as np
import torch import torch
import torch_scatter
from torch import nn from torch import nn
from torch.nn import CrossEntropyLoss


from modelscope.models.nlp.star3.configuration_star3 import Star3Config from modelscope.models.nlp.star3.configuration_star3 import Star3Config
from modelscope.utils.constant import ModelFile from modelscope.utils.constant import ModelFile
@@ -121,33 +115,17 @@ class BertEmbeddings(nn.Module):
words_embeddings = self.word_embeddings(input_ids) words_embeddings = self.word_embeddings(input_ids)
header_embeddings = self.word_embeddings(header_ids) header_embeddings = self.word_embeddings(header_ids)


# header mean pooling
header_flatten_embeddings = self.word_embeddings(header_flatten_tokens)
header_flatten_index = header_flatten_index.reshape(
(-1, header_flatten_index.shape[1], 1))
header_flatten_index = header_flatten_index.repeat(
1, 1, header_flatten_embeddings.shape[2])
header_flatten_output = header_flatten_output.reshape(
(-1, header_flatten_output.shape[1], 1))
header_flatten_output = header_flatten_output.repeat(
1, 1, header_flatten_embeddings.shape[2])
header_embeddings = torch_scatter.scatter_mean(
header_flatten_embeddings,
header_flatten_index,
out=header_flatten_output,
dim=1)
token_column_id = token_column_id.reshape(
(-1, token_column_id.shape[1], 1))
token_column_id = token_column_id.repeat(
(1, 1, header_embeddings.shape[2]))
token_column_mask = token_column_mask.reshape(
(-1, token_column_mask.shape[1], 1))
token_column_mask = token_column_mask.repeat(
(1, 1, header_embeddings.shape[2]))
token_header_embeddings = torch.gather(header_embeddings, 1,
token_column_id)
words_embeddings = words_embeddings * (1.0 - token_column_mask) + \
token_header_embeddings * token_column_mask
if col_dict_list is not None and l_hs is not None:
col_dict_list = np.array(col_dict_list)[ids.cpu().numpy()].tolist()
header_len = np.array(
header_len, dtype=object)[ids.cpu().numpy()].tolist()
for bi, col_dict in enumerate(col_dict_list):
for ki, vi in col_dict.items():
length = header_len[bi][vi]
if length == 0:
continue
words_embeddings[bi, ki, :] = torch.mean(
header_embeddings[bi, vi, :length, :], dim=0)


position_embeddings = self.position_embeddings(position_ids) position_embeddings = self.position_embeddings(position_ids)
token_type_embeddings = self.token_type_embeddings(token_type_ids) token_type_embeddings = self.token_type_embeddings(token_type_ids)


+ 1
- 3
modelscope/models/nlp/table_question_answering.py View File

@@ -1,11 +1,10 @@
# Copyright (c) Alibaba, Inc. and its affiliates. # Copyright (c) Alibaba, Inc. and its affiliates.


import os import os
from typing import Dict, Optional
from typing import Dict


import numpy import numpy
import torch import torch
import torch.nn as nn
import torch.nn.functional as F import torch.nn.functional as F
from transformers import BertTokenizer from transformers import BertTokenizer


@@ -15,7 +14,6 @@ from modelscope.models.builder import MODELS
from modelscope.models.nlp.star3.configuration_star3 import Star3Config from modelscope.models.nlp.star3.configuration_star3 import Star3Config
from modelscope.models.nlp.star3.modeling_star3 import Seq2SQL, Star3Model from modelscope.models.nlp.star3.modeling_star3 import Seq2SQL, Star3Model
from modelscope.preprocessors.star3.fields.struct import Constant from modelscope.preprocessors.star3.fields.struct import Constant
from modelscope.utils.config import Config
from modelscope.utils.constant import ModelFile, Tasks from modelscope.utils.constant import ModelFile, Tasks
from modelscope.utils.device import verify_device from modelscope.utils.device import verify_device




+ 1
- 1
modelscope/models/nlp/task_models/sequence_classification.py View File

@@ -48,7 +48,7 @@ class SequenceClassificationModel(SingleBackboneTaskModelBase):
self.build_backbone(backbone_cfg) self.build_backbone(backbone_cfg)
self.build_head(head_cfg) self.build_head(head_cfg)


def forward(self, input: Dict[str, Any]) -> Dict[str, np.ndarray]:
def forward(self, **input: Dict[str, Any]) -> Dict[str, np.ndarray]:
outputs = super().forward(input) outputs = super().forward(input)
sequence_output, pooled_output = self.extract_backbone_outputs(outputs) sequence_output, pooled_output = self.extract_backbone_outputs(outputs)
outputs = self.head.forward(pooled_output) outputs = self.head.forward(pooled_output)


+ 1
- 1
modelscope/pipelines/nlp/fill_mask_pipeline.py View File

@@ -101,7 +101,7 @@ class FillMaskPipeline(Pipeline):
def forward(self, inputs: Dict[str, Any], def forward(self, inputs: Dict[str, Any],
**forward_params) -> Dict[str, Any]: **forward_params) -> Dict[str, Any]:
with torch.no_grad(): with torch.no_grad():
return self.model(inputs, **forward_params)
return self.model(**inputs, **forward_params)


def postprocess(self, inputs: Dict[str, Tensor]) -> Dict[str, Tensor]: def postprocess(self, inputs: Dict[str, Tensor]) -> Dict[str, Tensor]:
"""process the prediction results """process the prediction results


+ 1
- 1
modelscope/pipelines/nlp/fill_mask_ponet_pipeline.py View File

@@ -97,7 +97,7 @@ class FillMaskPonetPipeline(Pipeline):
def forward(self, inputs: Dict[str, Any], def forward(self, inputs: Dict[str, Any],
**forward_params) -> Dict[str, Any]: **forward_params) -> Dict[str, Any]:
with torch.no_grad(): with torch.no_grad():
return self.model(inputs, **forward_params)
return self.model(**inputs, **forward_params)


def postprocess(self, inputs: Dict[str, Tensor]) -> Dict[str, Tensor]: def postprocess(self, inputs: Dict[str, Tensor]) -> Dict[str, Tensor]:
"""process the prediction results """process the prediction results


+ 1
- 1
modelscope/pipelines/nlp/sequence_classification_pipeline_base.py View File

@@ -35,7 +35,7 @@ class SequenceClassificationPipelineBase(Pipeline):
def forward(self, inputs: Dict[str, Any], def forward(self, inputs: Dict[str, Any],
**forward_params) -> Dict[str, Any]: **forward_params) -> Dict[str, Any]:
with torch.no_grad(): with torch.no_grad():
return self.model(inputs, **forward_params)
return self.model(**inputs, **forward_params)


def postprocess(self, def postprocess(self,
inputs: Dict[str, Any], inputs: Dict[str, Any],


+ 2
- 3
modelscope/pipelines/nlp/table_question_answering_pipeline.py View File

@@ -2,7 +2,6 @@
import os import os
from typing import Any, Dict, Union from typing import Any, Dict, Union


import torch
from transformers import BertTokenizer from transformers import BertTokenizer


from modelscope.metainfo import Pipelines from modelscope.metainfo import Pipelines
@@ -88,7 +87,7 @@ class TableQuestionAnsweringPipeline(Pipeline):
return current_sql return current_sql


elif action == 'del_focus': elif action == 'del_focus':
pre_final_sql = copy.deepcopy(history_sql)
pre_final_sql = history_sql
pre_sels = [] pre_sels = []
pre_aggs = [] pre_aggs = []
for idx, seli in enumerate(pre_final_sql['sel']): for idx, seli in enumerate(pre_final_sql['sel']):
@@ -151,7 +150,7 @@ class TableQuestionAnsweringPipeline(Pipeline):
return pre_final_sql return pre_final_sql


elif action == 'del_cond': elif action == 'del_cond':
pre_final_sql = copy.deepcopy(history_sql)
pre_final_sql = history_sql


final_conds = [] final_conds = []




+ 1
- 1
modelscope/pipelines/nlp/zero_shot_classification_pipeline.py View File

@@ -85,7 +85,7 @@ class ZeroShotClassificationPipeline(Pipeline):
def forward(self, inputs: Dict[str, Any], def forward(self, inputs: Dict[str, Any],
**forward_params) -> Dict[str, Any]: **forward_params) -> Dict[str, Any]:
with torch.no_grad(): with torch.no_grad():
return self.model(inputs, **forward_params)
return self.model(**inputs, **forward_params)


def postprocess(self, def postprocess(self,
inputs: Dict[str, Any], inputs: Dict[str, Any],


+ 19
- 0
modelscope/trainers/easycv/__init__.py View File

@@ -0,0 +1,19 @@
# Copyright (c) Alibaba, Inc. and its affiliates.
from typing import TYPE_CHECKING

from modelscope.utils.import_utils import LazyImportModule

if TYPE_CHECKING:
from .utils import AddLrLogHook, EasyCVMetric
else:
_import_structure = {'utils': ['AddLrLogHook', 'EasyCVMetric']}

import sys

sys.modules[__name__] = LazyImportModule(
__name__,
globals()['__file__'],
_import_structure,
module_spec=__spec__,
extra_objects={},
)

+ 2
- 2
modelscope/trainers/nlp/space/dialog_intent_trainer.py View File

@@ -5,7 +5,7 @@ from typing import Callable, Dict, Optional, Tuple, Union
import numpy as np import numpy as np


from modelscope.metainfo import Trainers from modelscope.metainfo import Trainers
from modelscope.models.nlp.space.model.generator import Generator
from modelscope.models.nlp.space.model.generator import SpaceGenerator
from modelscope.models.nlp.space.model.model_base import SpaceModelBase from modelscope.models.nlp.space.model.model_base import SpaceModelBase
from modelscope.preprocessors.space.data_loader import \ from modelscope.preprocessors.space.data_loader import \
get_sequential_data_loader get_sequential_data_loader
@@ -90,7 +90,7 @@ class DialogIntentTrainer(BaseTrainer):
data_type='test') data_type='test')


# set generator # set generator
generator = Generator.create(self.cfg, reader=bpe)
generator = SpaceGenerator.create(self.cfg, reader=bpe)
# construct model # construct model
self.model = SpaceModelBase.create( self.model = SpaceModelBase.create(
self.cfg.Model.init_checkpoint, self.cfg.Model.init_checkpoint,


+ 1
- 1
modelscope/trainers/trainer.py View File

@@ -542,7 +542,7 @@ class EpochBasedTrainer(BaseTrainer):
value = train_outputs.get(key, None) value = train_outputs.get(key, None)
if value is not None: if value is not None:
if dist.is_available() and dist.is_initialized(): if dist.is_available() and dist.is_initialized():
value = value.data.clone()
value = value.data.clone().to('cuda')
dist.all_reduce(value.div_(dist.get_world_size())) dist.all_reduce(value.div_(dist.get_world_size()))
log_vars.update({key: value.item()}) log_vars.update({key: value.item()})
self.log_buffer.update(log_vars) self.log_buffer.update(log_vars)


+ 3
- 0
modelscope/utils/ast_utils.py View File

@@ -293,6 +293,9 @@ class AstScaning(object):
if type(attribute_node).__name__ == 'Str': if type(attribute_node).__name__ == 'Str':
result.append((getattr(node, result.append((getattr(node,
'arg'), attribute_node.s, None)) 'arg'), attribute_node.s, None))
elif type(attribute_node).__name__ == 'Constant':
result.append(
(getattr(node, 'arg'), attribute_node.value, None))
else: else:
result.append((getattr(node, 'arg'), ) result.append((getattr(node, 'arg'), )
+ _get_attribute_item(attribute_node)) + _get_attribute_item(attribute_node))


+ 0
- 1
modelscope/utils/nlp/nlp_utils.py View File

@@ -1,4 +1,3 @@
import os.path as osp
from typing import List from typing import List


from modelscope.outputs import OutputKeys from modelscope.outputs import OutputKeys


+ 0
- 1
tests/pipelines/test_table_question_answering.py View File

@@ -1,7 +1,6 @@
# Copyright (c) Alibaba, Inc. and its affiliates. # Copyright (c) Alibaba, Inc. and its affiliates.
import os import os
import unittest import unittest
from typing import List


from transformers import BertTokenizer from transformers import BertTokenizer




+ 3
- 0
tests/run_config.yaml View File

@@ -6,6 +6,9 @@ isolated: # test cases that may require excessive anmount of GPU memory, which
- test_video_summarization.py - test_video_summarization.py
- test_dialog_modeling.py - test_dialog_modeling.py
- test_csanmt_translation.py - test_csanmt_translation.py
- test_image_super_resolution.py
- test_easycv_trainer.py
- test_segformer.py


envs: envs:
default: # default env, case not in other env will in default, pytorch. default: # default env, case not in other env will in default, pytorch.


+ 4
- 4
tests/trainers/easycv/test_segformer.py View File

@@ -31,11 +31,11 @@ class EasyCVTrainerTestSegformer(unittest.TestCase):
shutil.rmtree(self.tmp_dir, ignore_errors=True) shutil.rmtree(self.tmp_dir, ignore_errors=True)


def _train(self): def _train(self):
# adapt to distributed mode
from easycv.utils.test_util import pseudo_dist_init
pseudo_dist_init()


cfg_options = {'train.max_epochs': 2}
cfg_options = {
'train.max_epochs': 2,
'model.decode_head.norm_cfg.type': 'BN'
}


trainer_name = Trainers.easycv trainer_name = Trainers.easycv
train_dataset = MsDataset.load( train_dataset = MsDataset.load(


Loading…
Cancel
Save