|
- # Copyright 2021 Huawei Technologies Co., Ltd
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # ============================================================================
- """
- PanGu predict run
- """
- import json
- import os
- import time
-
- import requests
- import datetime
- import glob
-
- import numpy as np
- from tqdm import tqdm
-
- import mindspore.common.dtype as mstype
- import mindspore.communication.management as D
- import mindspore as ms
- from mindspore import context, Tensor
- from mindspore import export
- from mindspore.context import ParallelMode
- from mindspore.parallel import set_algo_parameters
- from mindspore.parallel._cost_model_context import _set_multi_subgraphs
- from mindspore.train.model import Model
- # from mindspore.train.serialization import load_distributed_checkpoint, load_checkpoint
- # from mindspore.nn.transformer.transformer import TransformerOpParallelConfig
-
- from mindspore.parallel._transformer.transformer import TransformerOpParallelConfig, TransformerRecomputeConfig
- from mindspore.parallel._transformer.loss import CrossEntropyLoss
- from src.generate import get_scores
- from src.pangu_alpha_v2 import EvalNet, PanguAlphaModel, EvalNet_200B, EvalNet_200B_pp
- from src.pangu_alpha_config import set_parse, PanguAlphaConfig
- from src.utils import get_args
-
- from mindspore.common import Parameter
- from mindspore.common.tensor import Tensor
- from mindspore.train.serialization import load_checkpoint, load_param_into_net
-
- # Define tokenizer
- from transformers import LlamaTokenizer
-
- vocab_file = '/tmp/yizx/pcmind200b_new_predict/tokenizer/llama_vocab/llama_zh_hf/tokenizer_2.model'
- # vocab_file = '/home/ma-user/modelarts/user-job-dir/pangu_alpha-r2.0beta_SFT/tokenizer/llama_vocab/llama_zh_hf/tokenizer_2.model'
- tokenizer = LlamaTokenizer.from_pretrained(vocab_file)
-
- EOT = tokenizer.eos_token_id
- PAD = tokenizer.unk_token_id
-
- def restore_checkpoint(args_param, network, cache_url='/cache/Ckpt/'):
- r"""
- Load checkpoint process.
- """
- restore_ranks = D.get_rank()
- print("======start single checkpoint", flush=True)
- ckpt_name = os.path.join(cache_url, f"rank_{restore_ranks}/mind_200b_mp8_{restore_ranks}.ckpt")
-
- if not ckpt_name:
- print(f"There is no ckpt file in {ckpt_name}, "
- f"current ckpt_files found is {ckpt_name} "
- f"with pattern {ckpt_name}, so skip the loading.")
-
- time_stamp = datetime.datetime.now()
- print(f"time stamp {time_stamp.strftime('%Y.%m.%d-%H:%M:%S')} pre trained ckpt model {ckpt_name} loading",
- flush=True)
- # Load checkpoint files latest file
- print(f'Start to load from {ckpt_name}')
- param_dict = load_checkpoint(ckpt_name)
- #for k, v in param_dict.items():
- # print(f"{k}: ", v.shape)
- load_param_into_net(network, param_dict, strict_load=False)
-
- def set_auto_parallel_context(args_opt):
- """Set the auto parallel context"""
- rank = 0
- device_num = 1
- context.reset_auto_parallel_context()
- # context.set_auto_parallel_context(
- # strategy_ckpt_load_file=args_opt.strategy_load_ckpt_path)
- if args_opt.distribute == "true":
- D.init()
- device_num = D.get_group_size()
- rank = D.get_rank()
- print("rank_id is {}, device_num is {}".format(rank, device_num))
- strategy_local_file = f"/cache/inference_strategy_100b_d8_mp8_dp1-{rank}.ckpt"
- context.set_auto_parallel_context(
- parallel_mode=ParallelMode.SEMI_AUTO_PARALLEL,
- gradients_mean=False,
- full_batch=True,
- loss_repeated_mean=True,
- enable_parallel_optimizer=False,
- strategy_ckpt_save_file=strategy_local_file,
- pipeline_stages=args_opt.stage_num)
- set_algo_parameters(elementwise_op_strategy_follow=True)
- _set_multi_subgraphs()
- else:
- strategy_local_file = f"/cache/inference_strategy_100b_d8_mp8_dp1-{rank}.ckpt"
- context.set_auto_parallel_context(strategy_ckpt_save_file=strategy_local_file)
- return rank, device_num
-
- def load_model(args_opt):
- """
- The main function for load model
- """
- context.set_context(mode=context.GRAPH_MODE,
- save_graphs=args_opt.save_graph,
- device_target=args_opt.device_target,
- max_device_memory="55GB")
- context.set_context(enable_graph_kernel=True)
- # Set parallel context
- rank, device_num = set_auto_parallel_context(args_opt)
- save_graphs_path = args_opt.save_graphs_path
- os.makedirs(save_graphs_path, exist_ok=True)
- context.set_context(save_graphs_path=save_graphs_path)
- """
- if args_opt.eval_task:
- use_past = False
- else:
- use_past = True if args_opt.export else (args_opt.use_past == "true")
- """
- print('local_rank:{}, start to run...'.format(rank), flush=True)
-
- # Set model property, rewrite the model parallel
- if device_num < args_opt.op_level_model_parallel_num:
- print(f"The op_level_model_parallel_num {args_opt.op_level_model_parallel_num} is smaller than the device num,"
- f"so change it to the {device_num}", flush=True)
- args_opt.op_level_model_parallel_num = device_num
- model_parallel_num = args_opt.op_level_model_parallel_num
- data_parallel_num = int(device_num / (model_parallel_num*args_opt.stage_num))
-
- parallel_config = TransformerOpParallelConfig(data_parallel=data_parallel_num,
- model_parallel=model_parallel_num,
- pipeline_stage=args_opt.stage_num,
- micro_batch_num=args_opt.micro_size,
- vocab_emb_dp=False,
- recompute=False)
- # add sequence_parallel
- parallel_config.sequence_parallel = args_opt.sequence_parallel
- # add select_recompute
- parallel_config.select_recompute = args_opt.select_recompute
-
- per_batch_size = args_opt.per_batch_size
- batch_size = per_batch_size * data_parallel_num
- # Now only support single batch_size for predict
- if args_opt.run_type == "predict":
- batch_size = 1
-
- # download ckpt to local
- D.init()
- device_num = D.get_group_size()
- rank_id = D.get_rank()
-
- softmax_compute_type = mstype.float16
- top_query_softmax = mstype.float16
- layernorm_compute_type = mstype.float16
- config = PanguAlphaConfig(
- batch_size=batch_size,
- seq_length=args_opt.seq_length,
- vocab_size=args_opt.vocab_size,
- hidden_size=args_opt.embedding_size,
- num_layers=args_opt.num_layers,
- num_heads=args_opt.num_heads,
- post_layernorm_residual=False,
- dropout_rate=0.0,
- ffn_hidden_size=args_opt.embedding_size * 4,
- use_past=args_opt.use_past,
- eod_reset=False,
- parallel_config=parallel_config,
- load_ckpt_path=None,
- run_type=args_opt.run_type,
- param_init_type=mstype.float16,
- use_rope=args_opt.use_rope,)
-
- config.softmax_compute_fp32 = softmax_compute_type
- config.top_query_softmax_fp32 = top_query_softmax
- config.layernorm_compute_fp32 = layernorm_compute_type
- print("===config is: ", config, flush=True)
- print("=====args_opt is: ", args_opt, flush=True)
-
- # Define network
- pangu_alpha = PanguAlphaModel(config)
-
- # loss = CrossEntropyLoss()
- # eval_net = PanGUAlphaLossWithPrompt(config, pangu_alpha, loss)
- # eval_net = EvalNet_200B(pangu_alpha, pad_token=args_opt.padding_id)
- eval_net = EvalNet_200B_pp(pangu_alpha, pad_token=args_opt.padding_id, seq_length=args_opt.seq_length)
- eval_net.set_train(False)
-
- # # 完整模型加载,要在构图之前
- # import time
- # time.sleep((rank % 8)*20)
- # load_checkpoint(local_ckpt_path, net=eval_net)
-
- model_predict = Model(eval_net)
- # Compile network and obtain tensor layout for loading ckpt
- inputs_np = Tensor(np.ones(shape=(config.batch_size, config.seq_length)), mstype.int32)
- current_index = Tensor(np.array([0]), mstype.int32)
- if args_opt.distribute == "false":
- predict_layout = None
- elif config.use_past:
- batch_valid_length = Tensor(np.array([0]), mstype.int32)
- init_true = Tensor([True], mstype.bool_)
- inputs_np_1 = Tensor(np.ones(shape=(config.batch_size, 1)), mstype.int32)
- model_predict.predict_network.add_flags_recursive(is_first_iteration=True)
- predict_layout = model_predict.infer_predict_layout(inputs_np, current_index, init_true, batch_valid_length)
- model_predict.predict_network.add_flags_recursive(is_first_iteration=False)
- _ = model_predict.infer_predict_layout(inputs_np_1, current_index, init_true, batch_valid_length)
- else:
- # Compiling only needs the shape
- predict_layout = model_predict.infer_predict_layout(inputs_np, current_index)
-
- # add loading delay
- time.sleep((rank_id % 8) * 60)
- cache_url = '/tmp/yizx/mp8/'
- restore_checkpoint(args_opt, eval_net, cache_url=cache_url)
- print("================load param ok=================", flush=True)
- f = open('/cache/load_ok_rank_{}.txt'.format(rank_id), 'w+')
- f.close()
- # add loading cache file Verify-Rule
- while True:
- for i in range(8):
- this_load_ok_file = '/cache/load_ok_rank_{}.txt'.format(i)
- if os.path.exists(this_load_ok_file):
- pass
- else:
- time.sleep(1)
- break
- break
- print("================>>> All load param ok=================", flush=True)
- ts_batch_valid_length = Tensor(np.array([0]), mstype.int32)
- ts_init_true = Tensor([True], mstype.bool_)
-
- ts_inputs_np_1 = Tensor(np.ones(shape=(config.batch_size, 1)), mstype.int32)
- netinput = [ts_inputs_np_1, current_index, ts_init_true, ts_batch_valid_length]
- localPath = f"/tmp/yizx/mindir_file/pcmind200b_v2_inc_{rank_id}"
- ms.export(eval_net, *netinput, file_name=localPath, file_format='MINDIR')
-
- # ts_inputs_np_full = Tensor(np.ones(shape=(config.batch_size, config.seq_length)), mstype.int32)
- # netinput_full = [ts_inputs_np_full, current_index, ts_init_true, ts_batch_valid_length]
- # localPath = f"/tmp/yizx/mindir_file/pcmind200b_v2_full_{rank_id}"
- # ms.export(eval_net, *netinput_full, file_name=localPath, file_format='MINDIR')
-
- print("================>>> Export2MindIR passed! >>>=================", flush=True)
- exit()
- return model_predict, config
-
- def run_predict(model_predict, config, args_opt):
- """run predict"""
- from src.generate import generate, generate_increment, generate_100b, generate_100b_task, generate_100b_task_time, generate_increment_time
- import time
-
- D.init()
- rank_id = D.get_rank()
- device_num = D.get_group_size()
-
- # generate_func = generate_increment if config.use_past else generate
- generate_func = generate_increment_time if config.use_past else generate_100b_task_time
-
- test_sample = [
- "今天是一个好天气,",
- "中国的四大发明有哪些?",
- "美国的四大发明有哪些?",
- "你是谁?请介绍下你自己",
- "台湾的省会是台北,广东的省会是广州,美国的首都是哪里?",
- "讲个笑话",
- "以’风、雪‘为基调,写一首七言绝句",
- "问:中国有哪些好玩的城市?请选取其中一个城市详细介绍当地景点和游玩攻略。\n答:",
- "列出斑马的三个独特特征,第一:",
- "最新调查显示,失业率上升了3%,",
- "我要做蛋炒饭,第一步:",
- "北极熊和灰熊的科学名称分别是什么?",
- "What happens to you if you eat watermelon seeds?",
- "Where did fortune cookies originate?",
- "Why do veins appear blue?",
- "中国的四大发明有哪些?",
- "1+3=",
- "1+2=3, 4+5=9, 120+12=132, 3+4=",
- "1*3=3, 4*5=20, 3*8=24, 2*6=",
- "3-2=1, 5-3=2, 18-11=7, 20-12=",
- "请介绍一下你自己",
- "你是谁,你从哪里来?",
- "请简单介绍一下《苏菲的世界》这本书",
- "请推荐几部经典文学作品,并挑选一部作品做详细介绍",
- "请用唯美的文字帮我写一首表达友情的诗:",
- "请把‘We introduce Vicuna-13B, an open-source chatbot trained by fine-tuning LLaMA on user-shared \
- conversations collected from ShareGPT. Preliminary evaluation using GPT-4 as a judge shows \
- Vicuna-13B achieves more than 90% quality of OpenAI ChatGPT and Google Bard while \
- outperforming other models like LLaMA and Stanford Alpaca in more than 90%* of cases. \
- The cost of training Vicuna-13B is around $300. ‘翻译为中文:",
- '谁是蝙蝠侠?',
- '1955 年谁是美国总统?',
- '2008年全球票房最高的电影是什么?',
- '请问马有多少条腿?',
- '请给以下公司分类:Apple、Facebook、Fedex',
- '请判断这些句子中表达的情绪是否正面:\n1. 我受不了家庭作业\n2. 这糟透了,很无聊 \n3. 我等不及万圣节了!!!\n4. 我的猫很可爱❤️❤️ \
- 5. 我讨厌巧克力',
- '请提取这段话中的关键词:橘猫,也称橘子猫,是混种猫中常见的一种毛色,成年公猫通常有5公斤以上,母猫4公斤以上。橘猫中的公猫较多,毛色通常分成全橘色、橘白相间两种。全橘色的猫,身上会带有浅浅白色条纹相间,仅有少数猫会在肚子呈现白色。橘白相间的猫,身上有大块橘色斑块与白底毛色相间。公猫通常是全橘色居多,母猫则是橘白色相间居多。',
- '猫、白菜和鲸鱼都属于什么?',
- '我:你最近在忙什么?朋友:看老电影。我:你有没有看到什么有趣的东西?朋友:',
- '把下面这句话更正为标准中文:我上班不想去',
- '将下面这句话翻译成英语、法语、西班牙语和日语:你们有哪些房间可用?',
- '请把这个电影名用 emoji 表示:星球大战',
- '列举10本科幻小说:',
- '为一篇写关于尼古拉·特斯拉及其技术贡献的文章创建一个大纲',
- '研究量子力学我该学习的五个要点是什么?',
- '#JavaScript to Python:JavaScript: dogs = ["bill", "joe", "carl"]car = []dogs.forEach((dog) { car.push(dog);});Python:',
- '解释这个短语:问题就像火箭',
- '类比“时光如梭”,创建短语',
- '根据这些笔记写一篇餐厅评论: 餐厅名称:The Blue Wharf Lobster 很棒,很吵,服务很有礼貌,价格不错。',
- '创建一个 SQL 请求以查找居住在LA并拥有超过 1000 积分的所有用户',
- '写一首关于交通信号灯的诗',
- '玉皇大帝住在平流层还是对流层?',
- '如果我在空中垂直抛球,球最初向哪个方向移动?',
- '假设一辆车可以在 3.85s 的时间内从 0 加速到 27.8 m/s,请计算这辆车的加速度,单位为 m/s/s',
- 'Zdeno Chara 以 175.1 km/h 的速度创造了最快的冰球拍击记录。假设一个冰球的质量为 0.17 kg。请问:a) Chara 的拍击球的动量是多少?b) 如果一颗子弹的质量为 0.020 kg,以 320 m/s 的速度射出,那么 Chara 的拍击速度和子弹的动量分别是多少?谁的动量更大?',
- '假设:“世界级的马拉松选手每天跑步不超过6公里。因此,如果一名选手每天跑步超过6公里,它就不是一名世界级马拉松选手。”\
- 请问以下哪项与上文推理方法相同?\n(A)跳远运动员每天早晨跑步。如果早晨有人跑步,则他不是跳远运动员。\n(B)如果每日只睡4小时,对身体不利。研究表明,最有价值的睡眠都发生在入睡后第5小时。 \n(C)家长和小孩做游戏时,小孩更高兴。因此,家长应该多做游戏。\n(D)如果某汽车早晨能起动,则晚上也可能起动。我们的车早晨通常能启动,同样,它晚上通常也能启动。\n(E)油漆三小时之内都不干。如果某涂料在三小时内干了,则不是油漆。',
- '这句话是什么意思:她头发上的雪讲述了她的历史。',
- '猜谜语:埋在奴家心底,打一字',
- '123456*654321等于多少?',
- '设x=0,ln(x+1)/x等于多少?',
- '1+1/4+1/9...+1/n^2等于多少?',
- '请问“1+1/2+1/3...+1/n”这个级数收敛吗',
- '请问下列话语中是否存在推理逻辑:“会议开始时间不到一小时了。因此,会议将在不到十分钟内开始。”',
- '思考下列语句:“上周在沃尔玛外面,我看到一个孩子和他的祖父试图通过 Uber 叫出租车,由于没有认真听祖父的建议,孩子在使用 app 时遇到了困难。”请问谁在用手机上遇到了困难?',
- '请问下列哪个事件引起了另一个事件?\n选项1:开始下雨。\n选项2:司机打开了雨刷器。',
- '请问1969年人类真的登上月球了吗?',
- '人们通常讨厌老鼠,但是一个老鼠赢得了全世界人民的心——那就是著名的米老鼠。五十年前,大多数电影都是无声的。一个名叫沃尔特·迪士尼的人制作了一只可以在他的电影中说话的卡通老鼠。他把它命名为米奇。无论年轻还是年老的人们都对这只能说话的老鼠感到非常兴奋。孩子们喜欢它,因为它为他们带来了欢乐和笑声。米老鼠从一开始就是一只干净的老鼠。也许这就是为什么人们讨厌真正的老鼠而爱米老鼠的原因之一。在它的早期生活中,米老鼠在电影中犯了一些错误。人们看到后很生气,他们写信给迪士尼,说他们不希望米老鼠做傻事。于是,迪士尼创造了一种新的角色名叫唐老鸭。他们还制作了一只狗叫做普鲁托。在电影中,这只狗到哪里都会做蠢事,犯错误。现在我们的米老鼠不仅干净而且聪明。他已经成为了一位美丽聪明的明星,而且在几乎每个国家都有朋友。\
- 最受欢迎的老鼠是?',
- '索菲亚读完了一本书的三分之二, 她算了一下,她读完的比她还没有读完的多了 90 页, 请问她的书总共有多少页?',
- '这个表情描述的是什么电影?',
- '确定给定句子是否表明两个事件之间存在因果关系、相关关系或中性关系。 如果句子表示因果关系,则回答因果关系;如果句子表示相关关系,则回答相关;如果句子表示两个事件之间既没有因果关系也没有相关关系,则回答中性。句子为:“如果我笑得太久,我的面部肌肉就会开始疼痛。”',
- '请结合给定事实,用是或否回答以下问题。事实: 埃德没有成名。 问:埃德成名了吗?',
- '有关部门在2020 年 7 月 8 日提出了以下声明:COVID-19 可以在人与人之间传播。 问:这个说法是真是假?',
- '有关部门在2020 年 7 月 8 日做出了以下声明:服用布洛芬会使 COVID-19 的症状恶化。 问:这个说法是真是假?',
- '请问人的哪个器官是用来看东西的?',
- '下面两句话哪一句中的形容词顺序是正确的?1.令人讨厌的普通尺寸全新紫色玻璃摩托车\n2.玻璃普通尺寸全新令人讨厌的紫色摩托车',
- '请问以下逻辑是否成立:“有些石头不是鱼,有些石头是姐妹,所以有些姐妹不是鱼”',
- '请问以下逻辑是否成立:“没有律师是驯狮师,一些驯狮者是外星人,那有些外国人不是律师”',
- "请问这个字符串表示了什么形状:'M 31,29 L 34,76 L 82,16 L 31,29’",
- '请仅使用d, e, g, h, i, l, t这七个字母生成尽可能多的单词,字母可以重复,且单词必须超过四个字符',
- '仅在题、状、盗、仿、赞、具、拥这七个汉字里组词,不能使用其他汉字,可以重复,且词语必须大于两个字。',
- '下面是一个表格,第一行是标题,后面每一行是一只企鹅。姓名,年龄,身高(厘米),体重(公斤)路易斯, 7, 50, 11伯纳德, 5, 80, 13文森特, 9, 60, 11格温, 8, 70, 15例如:路易斯的年龄是7岁,格温的体重是15公斤,伯纳德的身高是80厘米。哪只企鹅最高?',
- '下面是一个表格,第一行是标题,后面每一行是一只企鹅。 姓名,年龄,身高(厘米),体重(公斤) 路易斯, 7, 50, 11 伯纳德, 5, 80, 13 文森特, 9, 60, 11 格温, 8, 70, 15 例如:路易斯的年龄是7岁,格温的体重是15公斤,伯纳德的身高是80厘米。 伯纳德是80厘米。 现在在表格中加入一只企鹅。 詹姆斯,12,90,12 哪只企鹅最高?',
- '詹姆斯决定每周跑 3 次 3 段冲刺跑,每段跑 60 米。他每周一共跑多少米?',
- '判断这是什么颜色:RGB 250, 128, 114',
- '亚伯拉罕·林肯多久修剪一次脚趾甲?A.不知道 B.每个周六晚上',
- '为什么镜子中的影像可以颠倒左右,却不能颠倒上下?',
- '以下有关镧系元素的哪个陈述是不正确的?\n(A) 镧系元素最常见的氧化态为 +3。\n(B) 镧系元素的配合物常常具有高配位数(>6)。\n(C) 所有镧系元素与水溶酸反应,能够产生氢气。\n(D) 镧系元素的原子半径在镧系元素周期表中由 La 到 Lu 逐渐增加。',
- '在对新生儿进行遗传测试时,发现了一种罕见的X连锁隐性遗传疾病。关于这种疾病的谱系图,以下哪种说法可能是正确的?\n(A) 母系的所有后代都会患上该病。\n(B) 在这个家族中,女性患病的比例将大约是男性的两倍。\n(C) 受影响的男性的所有女儿都会患病。\n(D) 患病的男性和女性的分布将是相等的。',
- '为什么防病毒扫描器无法发现Heartbleed的利用?\n(A) 这是一个无意义的问题:Heartbleed只能读取缓冲区外的内容,因此没有可能的利用。\n(B) 防病毒扫描器往往寻找病毒和其他恶意软件。\n(C) Heartbleed攻击防病毒扫描器本身。\n(D) 防病毒扫描器往往寻找病毒和其他恶意代码,但Heartbleed利用可窃取秘密而无需注入任何代码。',
- '截至2017年,全球1岁的儿童中有多少已接种某种疾病的疫苗?',
- '为什么在小行星带所在的地方没有行星呢?请选择:\n(A) 有一颗行星曾经在这里形成,但被一次灾难性的碰撞摧毁了。\n(B) 在太阳系星云的这个区域内没有足够的物质形成一颗行星。\n(C) 这里有太多的岩石物质,无法形成类地行星,但又没有足够的气态物质形成类木行星。\n(D) 木星的共振阻止物质聚集形成行星。',
- '在人口转型模型的第三阶段,以下哪项是正确的?\n(A) 出生率增加,人口增长率减缓。\n(B) 出生率下降,人口增长率减缓。\n(C) 出生率增加,人口增长率增加。\n(D) 出生率下降,人口增长率增加。',
- '以下哪项不包括在美国GDP中?\n(A) 美国军队在一个外国开设新基地,并驻扎了1000名美国人员。\n(B) 日本消费者购买了数千张在美国制作的CD。\n(C) 一位美国流行歌手在巴黎举办了一场门票售罄的音乐会。\n(D) 一部法国戏剧作品巡演美国数十个城市。',
- '国会为什么反对威尔逊的国家联盟提案?',
- '《化学武器公约》(CWC)禁止拥有和使用化学武器;然而,它没有执行要求签署国申报其现有化学武器库存、确认曾经参与化学生产的设施,或宣布现有库存将被销毁的规定,这是为什么?',
- '你为一家公用事业公司工作,该公司正在社区建设一个生物质能发电厂。你的雇主要求你做一系列关于该工厂和未来运作的社区讲座。在你要发表演讲的几个小时前,你参观了工厂,演讲稿是由你的直接主管准备的。在参观工厂的过程中,你发现演讲中的一些说法并不真实。你会怎么做?',
- '根据德国法律,我作为一个居住在慕尼黑,单身且抚养3个未成年儿童的母亲,每年的收入约为 8 万欧元,住房费用约 2 万欧元,我的年缴税额与所应申请的补贴如何计算?',
- '研究人员现在认为,造成玛雅文明衰落的原因主要是:(A)某种类型的地震、火山或海啸。(B)刀耕火种造成的生态退化。(C)无休止的战争。(D)导致先天性疾病增加的繁育方式。',
- '根据Lewin, Lippet和White在1939年的实验,哪种领导形式让参与者产生了最多的工作?(A)自由放任 (B)民主 (C)独裁 (D)自由放任和民主的混合体',
- ]
-
- # test_sample = ["中国的四大发明有哪些?",
- # "请详细的介绍中国的四大发明:",
- # "请从来源、时期、发明人、演变过程、对世界格局的影响等方面详细的介绍中国的”四大发明“。",
- # "四大发明来源于哪个国家?请用专业的知识给大家介绍。",
- # "假如你是知名大学研究汉语言文学的教授,请您给大家讲解’中国四大发明‘,",
- # "请把‘We introduce Vicuna-13B, an open-source chatbot trained by fine-tuning LLaMA on user-shared conversations collected from ShareGPT. Preliminary evaluation using GPT-4 as a judge shows Vicuna-13B achieves more than 90% quality of OpenAI ChatGPT and Google Bard while outperforming other models like LLaMA and Stanford Alpaca in more than 90%* of cases. The cost of training Vicuna-13B is around $300. ‘翻译为中文:",
- # "请把‘We introduce Vicuna-13B, an open-source chatbot trained by fine-tuning LLaMA on user-shared conversations collected from ShareGPT. Preliminary evaluation using GPT-4 as a judge shows Vicuna-13B achieves more than 90% quality of OpenAI ChatGPT and Google Bard while outperforming other models like LLaMA and Stanford Alpaca in more than 90%* of cases. The cost of training Vicuna-13B is around $300. ‘翻译为德语:",
- # "请把‘We introduce Vicuna-13B, an open-source chatbot trained by fine-tuning LLaMA on user-shared conversations collected from ShareGPT. Preliminary evaluation using GPT-4 as a judge shows Vicuna-13B achieves more than 90% quality of OpenAI ChatGPT and Google Bard while outperforming other models like LLaMA and Stanford Alpaca in more than 90%* of cases. The cost of training Vicuna-13B is around $300. ‘翻译为法语:",
- # "请把‘We introduce Vicuna-13B, an open-source chatbot trained by fine-tuning LLaMA on user-shared conversations collected from ShareGPT. Preliminary evaluation using GPT-4 as a judge shows Vicuna-13B achieves more than 90% quality of OpenAI ChatGPT and Google Bard while outperforming other models like LLaMA and Stanford Alpaca in more than 90%* of cases. The cost of training Vicuna-13B is around $300. ‘翻译为俄语:",
- # "以’风、雪‘为基调,写一首七言绝句。",
- # "以’风、雪‘为关键词,根据你自己此时的心境,写一首四句话的七言绝句:",
- # "假设你是一个唐代的诗人,以’风、雪‘为关键词,根据你自己此时的心境,写一首七言绝句:",
- # "你读了’《咏雪》唐·白居易\n已讶衾枕冷,\n复见窗户明。\n夜深知雪重,\n时闻折竹声。‘,即兴而发,以’风、雪‘为主题,写了一首七言绝句:",
- # "北极熊和灰熊的科学名称分别是什么?",
- # "北极熊和灰熊的科学名称分别是什么?请从科学研究的角度详细介绍一下这两个物种。",
- # "我要做蛋炒饭,请按步骤写一个详细的制作教程:",
- # "中国有哪些好玩的城市?请选取其中一个城市详细介绍当地景点和游玩攻略。",
- # "中国有哪些好玩的城市?请给一些推荐,并选取其中一个城市详细介绍当地景点、美食,并制定一个为期7天的游玩攻略。",
- # "中国有哪些好玩的城市?请给一些推荐,并选取其中一个城市详细介绍当地景点、美食,并对当地的历史文化景点做个通俗易懂的讲解。",
- # "请用唯美的文字帮我写一首表达友情的诗:",
- # "我最近要离开长期生活的城市去读大学了,这里有我多年的’友情‘,离别前我为我的朋友们写了一首表达我们之间友情的抒情诗:",
- # "用充满诗意的文字,写一首描述’友情‘的诗歌:",
- # "介绍一下台湾,台湾是哪个国家的?",
- # "台湾发生了战争最有可能的原因是什么?",
- # "今天是一个好天气,",
- # "美国的四大发明有哪些?",
- # "你是谁?请介绍下你自己",
- # "台湾的省会是台北,广东的省会是广州,美国的首都是哪里?",
- # "讲个笑话",
- # "问:中国有哪些好玩的城市?请选取其中一个城市详细介绍当地景点和游玩攻略。\n答:",
- # "列出斑马的三个独特特征,第一:",
- # "最新调查显示,失业率上升了3%,",
- # "我要做蛋炒饭,第一步:",
- # "北极熊和灰熊的科学名称分别是什么?",
- # "What happens to you if you eat watermelon seeds?",
- # "Where did fortune cookies originate?",
- # "Why do veins appear blue?",
- # "1+3=",
- # "1+2=3, 4+5=9, 120+12=132, 3+4=",
- # "1*3=3, 4*5=20, 3*8=24, 2*6=",
- # "3-2=1, 5-3=2, 18-11=7, 20-12=",
- # "请介绍一下你自己",
- # "你是谁,你从哪里来?",
- # "请简单介绍一下《苏菲的世界》这本书",
- # "请推荐几部经典文学作品,并挑选一部作品做详细介绍",
- # "请用唯美的文字帮我写一首表达友情的诗:",
- # "请把‘We introduce Vicuna-13B, an open-source chatbot trained by fine-tuning LLaMA on user-shared \
- # conversations collected from ShareGPT. Preliminary evaluation using GPT-4 as a judge shows \
- # Vicuna-13B achieves more than 90% quality of OpenAI ChatGPT and Google Bard while \
- # outperforming other models like LLaMA and Stanford Alpaca in more than 90%* of cases. \
- # The cost of training Vicuna-13B is around $300. ‘翻译为中文:",
- # '谁是蝙蝠侠?',
- # '1955 年谁是美国总统?',
- # '2008年全球票房最高的电影是什么?',
- # '请问马有多少条腿?',
- # '请给以下公司分类:Apple、Facebook、Fedex']
-
- time_all = []
- time_word = []
- print(">>> go inference")
- for idx, sample in enumerate(test_sample):
-
- # Tokenize input sentence to ids
- sample = f"问: {sample}\n 答: "
- start_sentence = tokenizer.encode(sample, add_special_tokens=False)
- # start_sentence = tokenizer.encode(sample)
- input_ids = np.array(start_sentence).reshape(1, -1)
- time_start = time.time()
- output_ids = generate_func(model_predict,
- input_ids,
- args_opt,
- top_p=args_opt.top_p,
- top_k_num=args_opt.top_k_num,
- max_generate_length=args_opt.max_generate_length,
- duRepeate=args_opt.duRepeate)#args_opt.duRepeate
- time_use = time.time() - time_start
- # Call inference
- if rank_id %8==0:
-
- # output_ids = generate_func(model_predict, input_ids, args_opt)
- # generate_100b_task(model, origin_inputs, config, top_p=1.0, top_k_num = 3, max_generate_length=100, duRepeate=True):
-
- # Decode output ids to sentence
- output_samples = tokenizer.decode(output_ids[input_ids.shape[-1]:].tolist(), skip_special_tokens=True)
- time_all.append(time_use/max(1, len(output_ids[input_ids.shape[-1]:].tolist())))
- time_word.append(time_use/max(1, len(output_samples)))
- print(f"----------------------{idx}------------------------")
- print(f"Input is: {sample}\n", flush=True)
- #print(f"Input lenght: {input_ids.shape[-1]}, output lenght: {output_ids.shape[-1]}\n", flush=True)
- #print(f"ids : {output_ids[input_ids.shape[-1]:].tolist()}\n", flush=True)
- print(f'Output is: {output_samples}\n', flush=True)
- #print(f"output lenght: {max(1, len(output_ids[input_ids.shape[-1]:].tolist()))}, compute time: {time_use}, Average time: {time_all[-1]} s/tokens. \n", flush=True)
- #print(f"Average time: {np.average(time_word)} s/字\n", flush=True)
-
- def main():
- """Main process for predict or export model"""
- opt = get_args(True)
- set_parse(opt)
- model_predict, config = load_model(opt)
-
- run_predict(model_predict, config, opt)
-
-
- if __name__ == "__main__":
- main()
-
|