trainer.train():StdinNotImplementedError:调用了 getpass,但此前端不支持输入请求

问题描述 投票:0回答:2

在 Kaggle 中保存版本时,每当我使用 Transformers.Trainer 类时,我都会收到 StdinNotImplementedError:调用了 getpass,但此前端不支持输入请求。我使用的通用代码:

from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(params)
trainer = Trainer(params)
trainer.train()

我现在正在运行的特定单元:

from transformers import Trainer, TrainingArguments,EarlyStoppingCallback

early_stopping = EarlyStoppingCallback()

training_args = TrainingArguments(
    output_dir=OUT_FINETUNED_MODEL_PATH,          
    num_train_epochs=20,              
    per_device_train_batch_size=16,  
    per_device_eval_batch_size=16,   
    warmup_steps=0,                
    weight_decay=0.01,               
    logging_dir='./logs',            
    logging_steps=100,
    evaluation_strategy="steps",
    eval_steps=100,
    load_best_model_at_end=True,
    metric_for_best_model="eval_loss",
    greater_is_better=False
    
)

trainer = Trainer(
    model=model,                         
    args=training_args,                  
    train_dataset=train_dataset,         
    eval_dataset=val_dataset,             
    callbacks=[early_stopping]

)

trainer.train()

当调用 trainer.train() 时,我收到以下错误,如果我使用本机 PyTorch 训练则不会收到该错误。据我所知,出现错误是因为我被要求输入密码,但在使用本机 PyTorch 代码时,以及在 Google Colab 上使用与 trainer.train() 相同的代码时,都不会询问密码。 任何解决方案都可以,例如:

  1. 避免被询问密码。
  2. 在 Kaggle 上保存笔记本时启用输入请求。之后,如果我理解正确的话,我需要访问 https://wandb.ai/authorize (创建帐户后)并将生成的密钥复制到控制台。但是,我不明白为什么 wandb 是必要的,因为到目前为止我从未明确使用过它。
wandb: You can find your API key in your browser here: https://wandb.ai/authorize
Traceback (most recent call last):
  File "/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_init.py", line 741, in init
    wi.setup(kwargs)
  File "/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_init.py", line 155, in setup
    wandb_login._login(anonymous=anonymous, force=force, _disable_warning=True)
  File "/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_login.py", line 210, in _login
    wlogin.prompt_api_key()
  File "/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_login.py", line 144, in prompt_api_key
    no_create=self._settings.force,
  File "/opt/conda/lib/python3.7/site-packages/wandb/sdk/lib/apikey.py", line 135, in prompt_api_key
    key = input_callback(api_ask).strip()
  File "/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py", line 825, in getpass
    "getpass was called, but this frontend does not support input requests."
IPython.core.error.StdinNotImplementedError: getpass was called, but this frontend does not support input requests.
wandb: ERROR Abnormal program exit
---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_init.py in init(job_type, dir, config, project, entity, reinit, tags, group, name, notes, magic, config_exclude_keys, config_include_keys, anonymous, mode, allow_val_change, resume, force, tensorboard, sync_tensorboard, monitor_gym, save_code, id, settings)
    740         wi = _WandbInit()
--> 741         wi.setup(kwargs)
    742         except_exit = wi.settings._except_exit

/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_init.py in setup(self, kwargs)
    154         if not settings._offline and not settings._noop:
--> 155             wandb_login._login(anonymous=anonymous, force=force, _disable_warning=True)
    156 

/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_login.py in _login(anonymous, key, relogin, host, force, _backend, _silent, _disable_warning)
    209     if not key:
--> 210         wlogin.prompt_api_key()
    211 

/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_login.py in prompt_api_key(self)
    143             no_offline=self._settings.force,
--> 144             no_create=self._settings.force,
    145         )

/opt/conda/lib/python3.7/site-packages/wandb/sdk/lib/apikey.py in prompt_api_key(settings, api, input_callback, browser_callback, no_offline, no_create, local)
    134             )
--> 135             key = input_callback(api_ask).strip()
    136         write_key(settings, key, api=api)

/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py in getpass(self, prompt, stream)
    824             raise StdinNotImplementedError(
--> 825                 "getpass was called, but this frontend does not support input requests."
    826             )

StdinNotImplementedError: getpass was called, but this frontend does not support input requests.

The above exception was the direct cause of the following exception:

Exception                                 Traceback (most recent call last)
<ipython-input-82-4d1046ab80b8> in <module>
     42     )
     43 
---> 44     trainer.train()

/opt/conda/lib/python3.7/site-packages/transformers/trainer.py in train(self, resume_from_checkpoint, trial, **kwargs)
   1067         model.zero_grad()
   1068 
-> 1069         self.control = self.callback_handler.on_train_begin(self.args, self.state, self.control)
   1070 
   1071         # Skip the first epochs_trained epochs to get the random state of the dataloader at the right point.

/opt/conda/lib/python3.7/site-packages/transformers/trainer_callback.py in on_train_begin(self, args, state, control)
    338     def on_train_begin(self, args: TrainingArguments, state: TrainerState, control: TrainerControl):
    339         control.should_training_stop = False
--> 340         return self.call_event("on_train_begin", args, state, control)
    341 
    342     def on_train_end(self, args: TrainingArguments, state: TrainerState, control: TrainerControl):

/opt/conda/lib/python3.7/site-packages/transformers/trainer_callback.py in call_event(self, event, args, state, control, **kwargs)
    386                 train_dataloader=self.train_dataloader,
    387                 eval_dataloader=self.eval_dataloader,
--> 388                 **kwargs,
    389             )
    390             # A Callback can skip the return of `control` if it doesn't change it.

/opt/conda/lib/python3.7/site-packages/transformers/integrations.py in on_train_begin(self, args, state, control, model, **kwargs)
    627             self._wandb.finish()
    628         if not self._initialized:
--> 629             self.setup(args, state, model, **kwargs)
    630 
    631     def on_train_end(self, args, state, control, model=None, tokenizer=None, **kwargs):

/opt/conda/lib/python3.7/site-packages/transformers/integrations.py in setup(self, args, state, model, **kwargs)
    604                     project=os.getenv("WANDB_PROJECT", "huggingface"),
    605                     name=run_name,
--> 606                     **init_args,
    607                 )
    608             # add config parameters (run may have been created manually)

/opt/conda/lib/python3.7/site-packages/wandb/sdk/wandb_init.py in init(job_type, dir, config, project, entity, reinit, tags, group, name, notes, magic, config_exclude_keys, config_include_keys, anonymous, mode, allow_val_change, resume, force, tensorboard, sync_tensorboard, monitor_gym, save_code, id, settings)
    779             if except_exit:
    780                 os._exit(-1)
--> 781             six.raise_from(Exception("problem"), error_seen)
    782     return run

/opt/conda/lib/python3.7/site-packages/six.py in raise_from(value, from_value)

Exception: problem
huggingface-transformers kaggle getpass wandb
2个回答
0
投票

您可能想尝试在

report_to="tensorboard"
中添加
TrainingArguments
或任何其他合理的字符串数组 https://huggingface.co/transformers/main_classes/trainer.html#transformers.TrainingArguments

如果您想使用多个记录器

report_to="all"
(默认值) 尝试
os.environ["WANDB_DISABLED"] = "true"
使 wandb 始终处于禁用状态。

参见:https://huggingface.co/transformers/main_classes/trainer.html#transformers.TFTrainer.setup_wandb


0
投票

从分词器导入 ByteLevelBPETokenizer

从 tokenizers.models 导入 BPE

从 Transformers 导入 GPT2Config,

GPT2LMHeadModel、GPT2Tokenizer、用于语言建模的数据收集器

从分词器导入分词器

tokenizer = Tokenizer(BPE(unk_token="[x]"))

从数据集导入load_dataset

从 Transformers 导入 Trainer,TrainingArguments

:::将您的 api 密钥写到 x

© www.soinside.com 2019 - 2024. All rights reserved.