提交 e57927b9 编写于 作者: W wuzewu

Adapt paddle-rc version

上级 6804b4ba
...@@ -40,9 +40,9 @@ def convert_dtype_to_string(dtype: str) -> paddle.fluid.core.VarDesc.VarType: ...@@ -40,9 +40,9 @@ def convert_dtype_to_string(dtype: str) -> paddle.fluid.core.VarDesc.VarType:
raise TypeError("dtype shoule in %s" % list(dtype_map.keys())) raise TypeError("dtype shoule in %s" % list(dtype_map.keys()))
def get_variable_info(var: paddle.Variable) -> dict: def get_variable_info(var: paddle.static.Variable) -> dict:
if not isinstance(var, paddle.Variable): if not isinstance(var, paddle.static.Variable):
raise TypeError("var shoule be an instance of paddle.Variable") raise TypeError("var shoule be an instance of paddle.static.Variable")
var_info = { var_info = {
'name': var.name, 'name': var.name,
...@@ -114,7 +114,7 @@ def rename_var(block: paddle.device.framework.Block, old_name: str, new_name: st ...@@ -114,7 +114,7 @@ def rename_var(block: paddle.device.framework.Block, old_name: str, new_name: st
def add_vars_prefix(program: paddle.static.Program, def add_vars_prefix(program: paddle.static.Program,
prefix: str, prefix: str,
vars: List[paddle.Variable] = None, vars: List[paddle.static.Variable] = None,
excludes: Callable = None): excludes: Callable = None):
''' '''
''' '''
...@@ -127,7 +127,7 @@ def add_vars_prefix(program: paddle.static.Program, ...@@ -127,7 +127,7 @@ def add_vars_prefix(program: paddle.static.Program,
def remove_vars_prefix(program: paddle.static.Program, def remove_vars_prefix(program: paddle.static.Program,
prefix: str, prefix: str,
vars: List[paddle.Variable] = None, vars: List[paddle.static.Variable] = None,
excludes: Callable = None): excludes: Callable = None):
''' '''
''' '''
......
...@@ -287,7 +287,7 @@ class BaseTask(object): ...@@ -287,7 +287,7 @@ class BaseTask(object):
return self.env.generator return self.env.generator
@property @property
def loss(self) -> paddle.Variable: def loss(self) -> paddle.static.Variable:
if self.is_predict_phase: if self.is_predict_phase:
raise RuntimeError() raise RuntimeError()
...@@ -296,7 +296,7 @@ class BaseTask(object): ...@@ -296,7 +296,7 @@ class BaseTask(object):
return self.env.loss return self.env.loss
@property @property
def labels(self) -> List[paddle.Variable]: def labels(self) -> List[paddle.static.Variable]:
if self.is_predict_phase: if self.is_predict_phase:
raise RuntimeError() raise RuntimeError()
...@@ -305,7 +305,7 @@ class BaseTask(object): ...@@ -305,7 +305,7 @@ class BaseTask(object):
return self.env.labels return self.env.labels
@property @property
def outputs(self) -> List[paddle.Variable]: def outputs(self) -> List[paddle.static.Variable]:
if not self.env.is_inititalized: if not self.env.is_inititalized:
self._build_env() self._build_env()
return self.env.outputs return self.env.outputs
...@@ -342,7 +342,7 @@ class BaseTask(object): ...@@ -342,7 +342,7 @@ class BaseTask(object):
return feed_list return feed_list
@property @property
def feed_var_list(self) -> List[paddle.Variable]: def feed_var_list(self) -> List[paddle.static.Variable]:
if not self.env.is_inititalized: if not self.env.is_inititalized:
self._build_env() self._build_env()
...@@ -356,7 +356,7 @@ class BaseTask(object): ...@@ -356,7 +356,7 @@ class BaseTask(object):
return [output.name for output in self.outputs] return [output.name for output in self.outputs]
@property @property
def fetch_var_list(self) -> List[paddle.Variable]: def fetch_var_list(self) -> List[paddle.static.Variable]:
vars = self.main_program.global_block().vars vars = self.main_program.global_block().vars
return [vars[varname] for varname in self.fetch_list] return [vars[varname] for varname in self.fetch_list]
......
...@@ -25,8 +25,8 @@ from paddlehub.compat.task.task_utils import RunState ...@@ -25,8 +25,8 @@ from paddlehub.compat.task.task_utils import RunState
class TransformerEmbeddingTask(BaseTask): class TransformerEmbeddingTask(BaseTask):
def __init__(self, def __init__(self,
pooled_feature: paddle.Variable, pooled_feature: paddle.static.Variable,
seq_feature: paddle.Variable, seq_feature: paddle.static.Variable,
feed_list: List[str], feed_list: List[str],
data_reader: Generic, data_reader: Generic,
config: RunConfig = None): config: RunConfig = None):
...@@ -36,7 +36,7 @@ class TransformerEmbeddingTask(BaseTask): ...@@ -36,7 +36,7 @@ class TransformerEmbeddingTask(BaseTask):
self.pooled_feature = pooled_feature self.pooled_feature = pooled_feature
self.seq_feature = seq_feature self.seq_feature = seq_feature
def _build_net(self) -> List[paddle.Variable]: def _build_net(self) -> List[paddle.static.Variable]:
# ClassifyReader will return the seqence length of an input text # ClassifyReader will return the seqence length of an input text
self.seq_len = paddle.data(name='seq_len', shape=[1], dtype='int64', lod_level=0) self.seq_len = paddle.data(name='seq_len', shape=[1], dtype='int64', lod_level=0)
return [self.pooled_feature, self.seq_feature] return [self.pooled_feature, self.seq_feature]
......
...@@ -74,8 +74,9 @@ class Trainer(object): ...@@ -74,8 +74,9 @@ class Trainer(object):
self.best_metrics = defaultdict(int) self.best_metrics = defaultdict(int)
if self.nranks > 1: if self.nranks > 1:
context = paddle.distributed.init_parallel_env() paddle.distributed.init_parallel_env()
self.model = paddle.DataParallel(self.model, context) strategy = paddle.distributed.prepare_context()
self.model = paddle.DataParallel(self.model, strategy)
self.compare_metrics = self._compare_metrics if not compare_metrics else compare_metrics self.compare_metrics = self._compare_metrics if not compare_metrics else compare_metrics
self._load_checkpoint() self._load_checkpoint()
...@@ -109,11 +110,18 @@ class Trainer(object): ...@@ -109,11 +110,18 @@ class Trainer(object):
logger.info('PaddleHub model checkpoint loaded. current_epoch={} [{}]'.format( logger.info('PaddleHub model checkpoint loaded. current_epoch={} [{}]'.format(
self.current_epoch, metric_msg)) self.current_epoch, metric_msg))
# load model from checkpoint # load model checkpoint
model_path = os.path.join(self.checkpoint_dir, '{}_{}'.format('epoch', self.current_epoch), 'model') model_params_path = os.path.join(self.checkpoint_dir, '{}_{}'.format('epoch', self.current_epoch),
state_dict, _ = paddle.load(model_path) 'model.pdparmas')
state_dict = paddle.load(model_params_path)
self.model.set_dict(state_dict) self.model.set_dict(state_dict)
# load optimizer checkpoint
optim_params_path = os.path.join(self.checkpoint_dir, '{}_{}'.format('epoch', self.current_epoch),
'model.pdopt')
state_dict = paddle.load(optim_params_path)
self.optimizer.set_dict(state_dict)
def _save_checkpoint(self): def _save_checkpoint(self):
'''Save model checkpoint and state dict''' '''Save model checkpoint and state dict'''
model_path = os.path.join(self.checkpoint_dir, '{}_{}'.format('epoch', self.current_epoch), 'model') model_path = os.path.join(self.checkpoint_dir, '{}_{}'.format('epoch', self.current_epoch), 'model')
...@@ -122,7 +130,10 @@ class Trainer(object): ...@@ -122,7 +130,10 @@ class Trainer(object):
def save_model(self, save_dir: str): def save_model(self, save_dir: str):
'''Save model''' '''Save model'''
paddle.save(self.model.state_dict(), save_dir) model_params_path = os.path.join(save_dir, 'model.pdparams')
optim_params_path = os.path.join(save_dir, 'model.pdopt')
paddle.save(self.model.state_dict(), model_params_path)
paddle.save(self.model.state_dict(), optim_params_path)
def _save_metrics(self): def _save_metrics(self):
with open(os.path.join(self.checkpoint_dir, 'metrics.pkl'), 'wb') as file: with open(os.path.join(self.checkpoint_dir, 'metrics.pkl'), 'wb') as file:
...@@ -154,8 +165,8 @@ class Trainer(object): ...@@ -154,8 +165,8 @@ class Trainer(object):
save_interval(int) : Save the checkpoint every `save_interval` epochs. save_interval(int) : Save the checkpoint every `save_interval` epochs.
''' '''
use_gpu = True use_gpu = True
place = paddle.CUDAPlace(ParallelEnv().dev_id) if use_gpu else paddle.CPUPlace() place = 'gpu' if use_gpu else 'cpu'
paddle.disable_static(place) paddle.set_device(place)
batch_sampler = paddle.io.DistributedBatchSampler( batch_sampler = paddle.io.DistributedBatchSampler(
train_dataset, batch_size=batch_size, shuffle=True, drop_last=False) train_dataset, batch_size=batch_size, shuffle=True, drop_last=False)
...@@ -245,8 +256,8 @@ class Trainer(object): ...@@ -245,8 +256,8 @@ class Trainer(object):
num_workers(int) : Number of subprocess to load data, default is 0. num_workers(int) : Number of subprocess to load data, default is 0.
''' '''
use_gpu = True use_gpu = True
place = paddle.CUDAPlace(ParallelEnv().dev_id) if use_gpu else paddle.CPUPlace() place = 'gpu' if use_gpu else 'cpu'
paddle.disable_static(place) paddle.set_device(place)
batch_sampler = paddle.io.DistributedBatchSampler( batch_sampler = paddle.io.DistributedBatchSampler(
eval_dataset, batch_size=batch_size, shuffle=False, drop_last=False) eval_dataset, batch_size=batch_size, shuffle=False, drop_last=False)
...@@ -312,12 +323,7 @@ class Trainer(object): ...@@ -312,12 +323,7 @@ class Trainer(object):
metrics = result.get('metrics', {}) metrics = result.get('metrics', {})
# back prop # back prop
if self.nranks > 1: loss.backward()
self.model.scale_loss(loss)
loss.backward()
self.model.apply_collective_grads()
else:
loss.backward()
return loss, metrics return loss, metrics
...@@ -350,7 +356,7 @@ class Trainer(object): ...@@ -350,7 +356,7 @@ class Trainer(object):
self.learning_rate_step(epoch_idx, batch_idx, self.optimizer.get_lr(), loss) self.learning_rate_step(epoch_idx, batch_idx, self.optimizer.get_lr(), loss)
def learning_rate_step(self, epoch_idx: int, batch_idx: int, learning_rate: Generic, loss: paddle.Tensor): def learning_rate_step(self, epoch_idx: int, batch_idx: int, learning_rate: Generic, loss: paddle.Tensor):
if isinstance(learning_rate, paddle.optimizer._LRScheduler): if isinstance(learning_rate, paddle.optimizer.lr.LRScheduler):
learning_rate.step() learning_rate.step()
def optimizer_zero_grad(self, epoch_idx: int, batch_idx: int, optimizer: paddle.optimizer.Optimizer): def optimizer_zero_grad(self, epoch_idx: int, batch_idx: int, optimizer: paddle.optimizer.Optimizer):
......
...@@ -239,17 +239,18 @@ class Yolov3Module(RunModule, ImageServing): ...@@ -239,17 +239,18 @@ class Yolov3Module(RunModule, ImageServing):
for i, out in enumerate(outputs): for i, out in enumerate(outputs):
anchor_mask = self.anchor_masks[i] anchor_mask = self.anchor_masks[i]
loss = F.yolov3_loss(x=out, loss = F.yolov3_loss(
gt_box=gtbox, x=out,
gt_label=gtlabel, gt_box=gtbox,
gt_score=gtscore, gt_label=gtlabel,
anchors=self.anchors, gt_score=gtscore,
anchor_mask=anchor_mask, anchors=self.anchors,
class_num=self.class_num, anchor_mask=anchor_mask,
ignore_thresh=self.ignore_thresh, class_num=self.class_num,
downsample_ratio=32, ignore_thresh=self.ignore_thresh,
use_label_smooth=False) downsample_ratio=32,
losses.append(paddle.reduce_mean(loss)) use_label_smooth=False)
losses.append(paddle.mean(loss))
self.downsample //= 2 self.downsample //= 2
return {'loss': sum(losses)} return {'loss': sum(losses)}
...@@ -287,13 +288,14 @@ class Yolov3Module(RunModule, ImageServing): ...@@ -287,13 +288,14 @@ class Yolov3Module(RunModule, ImageServing):
mask_anchors.append((self.anchors[2 * m])) mask_anchors.append((self.anchors[2 * m]))
mask_anchors.append(self.anchors[2 * m + 1]) mask_anchors.append(self.anchors[2 * m + 1])
box, score = F.yolo_box(x=out, box, score = F.yolo_box(
img_size=im_shape, x=out,
anchors=mask_anchors, img_size=im_shape,
class_num=self.class_num, anchors=mask_anchors,
conf_thresh=self.valid_thresh, class_num=self.class_num,
downsample_ratio=self.downsample, conf_thresh=self.valid_thresh,
name="yolo_box" + str(i)) downsample_ratio=self.downsample,
name="yolo_box" + str(i))
boxes.append(box) boxes.append(box)
scores.append(paddle.transpose(score, perm=[0, 2, 1])) scores.append(paddle.transpose(score, perm=[0, 2, 1]))
...@@ -302,13 +304,14 @@ class Yolov3Module(RunModule, ImageServing): ...@@ -302,13 +304,14 @@ class Yolov3Module(RunModule, ImageServing):
yolo_boxes = paddle.concat(boxes, axis=1) yolo_boxes = paddle.concat(boxes, axis=1)
yolo_scores = paddle.concat(scores, axis=2) yolo_scores = paddle.concat(scores, axis=2)
pred = F.multiclass_nms(bboxes=yolo_boxes, pred = F.multiclass_nms(
scores=yolo_scores, bboxes=yolo_boxes,
score_threshold=self.valid_thresh, scores=yolo_scores,
nms_top_k=self.nms_topk, score_threshold=self.valid_thresh,
keep_top_k=self.nms_posk, nms_top_k=self.nms_topk,
nms_threshold=self.nms_thresh, keep_top_k=self.nms_posk,
background_label=-1) nms_threshold=self.nms_thresh,
background_label=-1)
bboxes = pred.numpy() bboxes = pred.numpy()
labels = bboxes[:, 0].astype('int32') labels = bboxes[:, 0].astype('int32')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册