XGBTuner crashes on Windows auto-tuning

I don’t know python very well, but it seems this could be related to Windows, Python, “multiprocessing”…and not having the if name == ‘main’: guard?

Sorry if this is documented somewhere, but I couldn’t find anyone else having the issue.

Traceback (most recent call last):

File “”, line 1, in

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py”, line 105, in spawn_main exitcode = _main(fd)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py”, line 114, in _main prepare(preparation_data)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py”, line 225, in prepare _fixup_main_from_path(data[‘init_main_from_path’])

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py”, line 277, in _fixup_main_from_path run_name=“mp_main”)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\runpy.py”, line 263, in run_path pkg_name=pkg_name, script_name=fname)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\runpy.py”, line 96, in _run_module_code mod_name, mod_spec, pkg_name, script_name)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\runpy.py”, line 85, in _run_code exec(code, run_globals)

File “C:\src\mediatubes\ml\tensortubes\models\mxnet\retinaface\r50_v1\test.py”, line 216, in tune_and_evaluate(tuning_option)

File “C:\src\mediatubes\ml\tensortubes\models\mxnet\retinaface\r50_v1\test.py”, line 176, in tune_and_evaluate tune_tasks(tasks, **tuning_opt)

File “C:\src\mediatubes\ml\tensortubes\models\mxnet\retinaface\r50_v1\test.py”, line 134, in tune_tasks tuner_obj = XGBTuner(tsk, loss_type=‘rank’, num_threads=1)

File “C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\xgboost_tuner.py”, line 74, in init log_interval=log_interval // 2)

File “C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\xgboost_cost_model.py”, line 145, in init self._reset_pool(self.space, self.target, self.task)

File “C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\xgboost_cost_model.py”, line 164, in _reset_pool self.pool = multiprocessing.Pool(self.num_threads)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\context.py”, line 119, in Pool context=self.get_context())

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py”, line 176, in init self._repopulate_pool()

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py”, line 241, in _repopulate_pool w.start()

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py”, line 112, in start self._popen = self._Popen(self)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\context.py”, line 322, in _Popen return Popen(process_obj)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\popen_spawn_win32.py”, line 46, in init prep_data = spawn.get_preparation_data(process_obj._name)

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py”, line 143, in get_preparation_data _check_not_importing_main()

File “C:\Users\jeremiah.morrill\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py”, line 136, in _check_not_importing_main is not going to be frozen to produce an executable.‘’')

RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.

    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.

I added the __main__
check on the entrypoint of my script:

> if __name__ == '__main__':
>     tune_and_evaluate(tuning_option)

This allows it to get further, but eventually crashes another way:

> [Task  1/39]  Current/Best:    7.31/ 828.67 GFLOPS | Progress: (36/540) | 222.44 sTraceback (most recent call last):
> 
>   File "test.py", line 217, in <module>
>     tune_and_evaluate(tuning_option)
> 
>   File "test.py", line 176, in tune_and_evaluate
>     tune_tasks(tasks, **tuning_opt)
> 
>   File "test.py", line 154, in tune_tasks
>     autotvm.callback.log_to_file(tmp_log_file)])
> 
>   File "C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\xgboost_tuner.py", line 86, in tune
>     super(XGBTuner, self).tune(*args, **kwargs)
> 
>   File "C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\tuner.py", line 150, in tune
>     self.update(inputs, results)
> 
>   File "C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\model_based_tuner.py", line 266, in update
>     self.cost_model.fit(self.xs, self.ys, self.plan_size)
> 
>   File "C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\xgboost_cost_model.py", line 181, in fit
>     x_train = self._get_feature(xs)
> 
>   File "C:\Users\jeremiah.morrill\AppData\Roaming\Python\Python37\site-packages\tvm-0.6.dev0-py3.7-win-amd64.egg\tvm\autotvm\tuner\xgboost_cost_model.py", line 321, in _get_feature
>     ret = np.empty((len(indexes), feature_len), dtype=np.float32)
> 
> TypeError: 'NoneType' object cannot be interpreted as an integer

As far as I know, AutoTVM doesn’t work on Windows unfortunately (related discussion).

I successfully autotuned a cuda mobilenet based model using gridsearch on windows. just xgb seems to have some issues.

Hi @jmorrill did you get any profit from tuning mobile net based model? I mean what the difference in FPS between tuned version and default version? Also, that your targets for tuning? Thanks.

Sorry I don’t have the numbers bug the GridSearch, I only remember that XGBoost gave way better results.

One Resnet50 I’ve been testing on Windows + XGBoost on, goes from 220ms (720p input) down to 85ms per inference run.

Is the Windows+XGBoost performance improvement on the CPU?or GPU?

Hi, I want to know, in same computer, can windows use best graph gotten under linux?

Yes it should be no problem

thank you very much!