ModelScope中,我在推理的时候是人工输入问题,我每次只输入了一个问题,但是代码会自动再输入一个问题
其实我只输入了,我感冒了是internlm-20b-chat这个模型
以下是我的推理启动脚本:class InferArguments:
model_type: str = field(
default='internlm-20b-chat',
metadata={'choices': list(MODEL_MAPPING.keys())})
sft_type: str = field(
default='lora', metadata={'choices': ['lora', 'full']})
template_type: str = field(
default= 'internlm', metadata={'choices': list(TEMPLATE_MAPPING.keys())})
ckpt_dir: str = 'output/internlm-20b-chat/v0-20231024-170814/checkpoint-140'
eval_human: bool = True # False: eval val_dataset
seed: int = 42
dtype: str = field(
default='bf16', metadata={'choices': ['bf16', 'fp16', 'fp32']})
ignore_args_error: bool = False # True: notebook compatibility
dataset: str = field(
default='QA-gen',
metadata={'help': f'dataset choices: {list(DATASET_MAPPING.keys())}'})
dataset_split_seed: int = 42
dataset_test_ratio: float = 0.2
show_dataset_sample: int = 10
system: str = 'you are a helpful assistant!'
max_length: Optional[int] = 2048
quantization_bit: int = field(default=0, metadata={'choices': [0, 4, 8]})
bnb_4bit_comp_dtype: str = field(
default=None, metadata={'choices': ['fp16', 'bf16', 'fp32']})
bnb_4bit_quant_type: str = field(
default='nf4', metadata={'choices': ['fp4', 'nf4']})
bnb_4bit_use_double_quant: bool = True
max_new_tokens: int = 1024
do_sample: bool = True
temperature: float = 0.9
top_k: int = 20
top_p: float = 0.9
repetition_penalty: float = 1.
# other
use_flash_attn: Optional[bool] = field(
default=None,
metadata={
'help':
"This parameter is used only when model_type.startswith('qwen')"
})
use_streamer: bool = True
merge_lora_and_save: bool = True
save_generation_config: bool = True
def init_argument(self):
# Can be manually initialized, unlike __post_init__
if self.template_type is None:
self.template_type = MODEL_MAPPING[self.model_type].get(
'template', 'default')
logger.info(f'Setting template_type: {self.template_type}')
self.torch_dtype, _, _ = select_dtype(self)
if self.bnb_4bit_comp_dtype is None:
self.bnb_4bit_comp_dtype = self.dtype
self.bnb_4bit_compute_dtype, self.load_in_4bit, self.load_in_8bit = select_bnb(
self)
if self.use_flash_attn is None:
self.use_flash_attn = 'auto'
在ModelScope中,当您进行推理时,模型可能需要接收两个输入,一个是文本序列(即问题),另一个是词汇表ID序列(即词汇表的索引)。因此,即使您每次仅输入一个问题,代码仍然会自动再输入一次词汇表ID序列,以满足模型的需求。
通常情况下,词汇表ID序列可以通过将文本转换为词汇表ID的方式来生成。为此,您可以使用Python编程语言中的tokenizer库来进行转换,例如Hugging Face的transformers库。
从你提供的信息来看,你在推理时遇到的问题可能与你的代码逻辑有关。在你的推理启动脚本中,你定义了一个InferArguments类,其中包含许多参数,如模型类型、数据集等。然而,你没有明确说明这些参数的具体作用,以及它们是如何影响推理过程的。
template用 internlm,--template_type internlm——此回答整理自钉群:魔搭ModelScope开发者联盟群 ①