头图

如果你已经把数据集和模型下载到本地了,但是还是跑不通lora代码,报错

All attempts to get a Google authentication bearer token failed ...

那么本教程适合你

改一行代码解决

在你的python(conda)路径下,找到

python<版本>/site-packages/tensorflow_datasets/robotics/dataset_importer_builder.py

把76行的self._GCS_BUCKET改成self._data_dir_root,解决问题

思考过程

以jaco play数据集为例,疯狂的单步调试

我单步调试,都能发现所有路径都在本地。这个报错和我单步调试的断点在哪一行没有关系。只要过某一段时间,无论我是否在执行程序,还是在断点,无论我在哪一行代码,都会自动弹出来这个报错

直到偶然发现了一个不是本地路径的变量。

  • DatasetImportBuilder_info(self)有问题,本质上是self.get_dataset_location()错了,必须联网。但是为什么要调用_info()
  • builder return 了 JacoPlay class的实例

    • JacoPlay没有__init__,,它继承了DatasetImporterBuilder

      • DatasetImporterBuilder也没有__init__,它继承了GeneratorBasedBuilder

        • GeneratorBasedBuilder也没有__init__,它继承了FileReaderBuilder

          • FileReaderBuilder__init__self.info.set_file_format(file_format)

            • infoFileReaderBuilder基类DatasetBuilder的一个property函数,它的值是self._info()的返回值
          • _info()DatasetBuilder中是一个抽象类,它在FileReaderBuilder中也没有重载
        • GeneratorBasedBuilder也没有重载_info()
      • DatasetImporterBuilder_info()出错了
  • 而且因为是构造函数出错。所以一旦在debug时想查看self,就会报错。这就叫观测才会导致错误,真正的量子力学
  • DatasetBuilder__init__也调用了info,因此只要我在DatasetBuilder__init__调用info之前观测self,就不会出错???然而还是不行。大概是因为vscode调试器查看self的时候就会调用__init__
  • 但是,查看self._data_dir_root, self._data_dir = self._build_data_dir(data_dir)的结果还是可以的。
  • self._data_dir_root是根目录(open x embodiment),self._data_dir是数据集的目录(到版本号)
  • DatasetImporterBuilderget_dataset_location(self)self._GCS_BUCKET改成self._data_dir_root
  • https://github.com/tensorflow/datasets/blob/master/tensorflow_datasets/robotics/dataset_importer_builder.py
  • 解决

赵为之
1 声望0 粉丝