facebookresearch / mmf

A modular framework for vision & language multimodal research from Facebook AI Research (FAIR)
https://mmf.sh/
Other
5.48k stars 935 forks source link

TypeError: 'NoneType' object is not callable when running hm_example_mmf #717

Closed danieljyj closed 3 years ago

danieljyj commented 3 years ago

🐛 Bug

I'm trying to run the hateful meme example, hm_example_mmf. But it seems that the model concat_vl wasn't registered.

Command

The command that I used is: mmf_run config="configs/experiments/defaults.yaml" model=concat_vl dataset=hateful_memes training.num_workers=0

I got this:

g:\mmf\mmf\utils\configuration.py:298: UserWarning: No model named 'concat_vl' has been registered warnings.warn(warning) 2020-12-16T11:25:45 | mmf.utils.configuration: Overriding option config to configs/experiments/defaults.yaml 2020-12-16T11:25:45 | mmf.utils.configuration: Overriding option model to concat_vl 2020-12-16T11:25:45 | mmf.utils.configuration: Overriding option datasets to hateful_memes 2020-12-16T11:25:45 | mmf.utils.configuration: Overriding option training.num_workers to 0 2020-12-16T11:25:45 | mmf: Logging to: ./save\train.log 2020-12-16T11:25:45 | mmf_cli.run: Namespace(config_override=None, local_rank=None, opts=['config=configs/experiments/defaults.yaml', 'model=concat_vl', 'dataset=hateful_memes', 'training.num_workers=0']) 2020-12-16T11:25:45 | mmf_cli.run: Torch version: 1.6.0 2020-12-16T11:25:45 | mmf.utils.general: CUDA Device 0 is: GeForce RTX 2060 2020-12-16T11:25:45 | mmf_cli.run: Using seed 45371147 2020-12-16T11:25:45 | mmf.trainers.mmf_trainer: Loading datasets Traceback (most recent call last): File "G:\Anaconda\envs\mmf2\Scripts\mmf_run-script.py", line 33, in sys.exit(load_entry_point('mmf', 'console_scripts', 'mmf_run')()) File "g:\mmf\mmf_cli\run.py", line 122, in run main(configuration, predict=predict) File "g:\mmf\mmf_cli\run.py", line 52, in main trainer.load() File "g:\mmf\mmf\trainers\mmf_trainer.py", line 42, in load super().load() File "g:\mmf\mmf\trainers\base_trainer.py", line 29, in load self.load_datasets() File "g:\mmf\mmf\trainers\mmf_trainer.py", line 71, in load_datasets self.dataset_loader.load_datasets() File "g:\mmf\mmf\common\dataset_loader.py", line 17, in load_datasets self.train_dataset.load(self.config) File "g:\mmf\mmf\datasets\multi_dataset_loader.py", line 113, in load self.build_datasets(config) File "g:\mmf\mmf\datasets\multi_dataset_loader.py", line 128, in build_datasets dataset_instance = build_dataset(dataset, dataset_config, self.dataset_type) File "g:\mmf\mmf\utils\build.py", line 119, in build_dataset dataset = builder_instance.load_dataset(config, dataset_type) File "g:\mmf\mmf\datasets\base_dataset_builder.py", line 100, in load_dataset dataset.init_processors() File "g:\mmf\mmf\datasets\concat_dataset.py", line 35, in _call_all_datasets_func value = getattr(dataset, name)(args, kwargs) File "g:\mmf\mmf\datasets\builders\hateful_memes\dataset.py", line 72, in init_processors super().init_processors() File "g:\mmf\mmf\datasets\base_dataset.py", line 59, in init_processors self.config.processors, reg_key, extra_params File "g:\mmf\mmf\utils\build.py", line 352, in build_processors processor_instance = Processor(processor_params, args, *kwargs) File "g:\mmf\mmf\datasets\processors\processors.py", line 157, in init self.processor = processor_class(params, args, **kwargs) TypeError: 'NoneType' object is not callable

Expected behavior

Environment

PyTorch version: 1.6.0 Is debug build: No CUDA used to build PyTorch: 10.2

OS: Microsoft Windows 10 GCC version: Could not collect CMake version: Could not collect

Python version: 3.7 Is CUDA available: Yes CUDA runtime version: Could not collect GPU models and configuration: Could not collect Nvidia driver version: Could not collect cuDNN version: Could not collect

Versions of relevant libraries: [pip3] numpy==1.19.2 [pip3] torch==1.6.0 [pip3] torchtext==0.5.0 [pip3] torchvision==0.7.0 [conda] blas 1.0 mkl [conda] cudatoolkit 10.2.89 h74a9793_1 [conda] mkl 2020.2 256 [conda] mkl-service 2.3.0 py37h196d8e1_0 [conda] mkl_fft 1.2.0 py37h45dec08_0 [conda] mkl_random 1.1.1 py37h47e9c7a_0 [conda] numpy 1.19.2 py37hadc3359_0 [conda] numpy-base 1.19.2 py37ha3acd2a_0 [conda] pytorch 1.6.0 py3.7_cuda102_cudnn7_0 pytorch [conda] torchtext 0.5.0 pypi_0 pypi [conda] torchvision 0.7.0 py37_cu102 pytorch

hackgoofer commented 3 years ago

In your models folder, is there a concat_vl.py? ie., https://github.com/apsdehal/hm_example_mmf/blob/master/models/concat_vl.py

apsdehal commented 3 years ago

Hi, did you export MMF_USER_DIR or set env.user_dir to point to where you cloned hm_example_mmf? Your command and logs suggests that you didn't.

danieljyj commented 3 years ago

Hi, did you export MMF_USER_DIR or set env.user_dir to point to where you cloned hm_example_mmf? Your command and logs suggests that you didn't.

Hi, Thank you! MMF_USER_DIR="." isn't recognised as a legal command by windows 10 so I thought I could ignore it. If that's the problem, could you please tell me how to set the env.user_dir ? I am using windows 10 powershell.

apsdehal commented 3 years ago

env.user_dir=<path\where\you\have\installed\hm_example_mmf>. Note that we have limited support for Windows powershell. I would recommend using Ubuntu shell inside Windows for running MMF.

danieljyj commented 3 years ago

I changed a bit the __init__.py file: original:

import hm_example_mmf.processors.processors
import hm_example_mmf.models.concat_vl

Now:

import processors.processors
import models.concat_vl

import sys
from mmf_cli.run import run
opts=[
    "config='./configs/experiments/defaults.yaml'", 
    "model=concat_vl", 
    "dataset=hateful_memes", 
    "training.num_workers=0"
]
run(opts=opts)

And I then run command: python ./__init__.py This time the model is registered, but I got error:

Traceback (most recent call last): File ".__init__.py", line 12, in run(opts=opts) File "g:\mmf\mmf_cli\run.py", line 91, in run configuration = Configuration(args) File "g:\mmf\mmf\utils\configuration.py", line 220, in init other_configs = self._build_other_configs() File "g:\mmf\mmf\utils\configuration.py", line 248, in _build_other_configs model_config = self._build_model_config(opts_config) File "g:\mmf\mmf\utils\configuration.py", line 301, in _build_model_config default_model_config_path = model_cls.config_path() TypeError: config_path() missing 1 required positional argument: 'cls'

danieljyj commented 3 years ago

I changed a bit the __init__.py file: original:

import hm_example_mmf.processors.processors
import hm_example_mmf.models.concat_vl

Now:

import processors.processors
import models.concat_vl

import sys
from mmf_cli.run import run
opts=[
    "config='./configs/experiments/defaults.yaml'", 
    "model=concat_vl", 
    "dataset=hateful_memes", 
    "training.num_workers=0"
]
run(opts=opts)

And I then run command: python ./__init__.py This time the model is registered, but I got error:

Traceback (most recent call last): File ".init.py", line 12, in run(opts=opts) File "g:\mmf\mmf_cli\run.py", line 91, in run configuration = Configuration(args) File "g:\mmf\mmf\utils\configuration.py", line 220, in init other_configs = self._build_other_configs() File "g:\mmf\mmf\utils\configuration.py", line 248, in _build_other_configs model_config = self._build_model_config(opts_config) File "g:\mmf\mmf\utils\configuration.py", line 301, in _build_model_config default_model_config_path = model_cls.config_path() TypeError: config_path() missing 1 required positional argument: 'cls'

Sorry, this is my fault , one line is changed incidentally, missed a @classmethod decorator. It's running without error now.

apsdehal commented 3 years ago

Great that you got it working. I would suggest that better approach would still be using env.user_dir.