本地运行Colab训练的BERTopic模型触发IndexError问题求助
问题
在Colab上训练好BERTopic模型后,本地运行时触发IndexError错误,报错信息如下:
IndexError: Failed in nopython mode pipeline (step: analyzing bytecode) pop from empty list
使用的代码:
from sentence_transformers import SentenceTransformer sentence_model = SentenceTransformer('KBLab/sentence-bert-swedish-cased') model = BERTopic.load('bertopic_model') text = "my text here for example" text = [text] embeddings = sentence_model.encode(text) topic, _ = model.transform(text, embeddings)
报错触发在最后一行代码,该代码在Colab运行正常,本地numba及相关库版本已与Colab保持一致,完整报错堆栈:
Traceback (most recent call last): File "/home/vaibhav/.local/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app response = self.full_dispatch_request() File "/home/vaibhav/.local/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) File "/home/vaibhav/.local/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() File "/home/vaibhav/.local/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "app.py", line 20, in reference_prediction preds = data_process(input_api) File "data_process.py", line 63, in data_process topic, _ = topic_model_mi.transform(text, embeddings) File "/home/vaibhav/.local/lib/python3.10/site-packages/bertopic/_bertopic.py", line 423, in transform umap_embeddings = self.umap_model.transform(embeddings) File "/home/vaibhav/.local/lib/python3.10/site-packages/umap/umap_.py", line 2859, in transform dmat = pairwise_distances( File "/home/vaibhav/.local/lib/python3.10/site-packages/sklearn/metrics/pairwise.py", line 2022, in pairwise_distances return _parallel_pairwise(X, Y, func, n_jobs, **kwds) File "/home/vaibhav/.local/lib/python3.10/site-packages/sklearn/metrics/pairwise.py", line 1563, in _parallel_pairwise return func(X, Y, **kwds) File "/home/vaibhav/.local/lib/python3.10/site-packages/sklearn/metrics/pairwise.py", line 1607, in _pairwise_callable out[i, j] = metric(X[i], Y[j], **kwds) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/dispatcher.py", line 487, in _compile_for_args raise e File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/dispatcher.py", line 420, in _compile_for_args return_val = self.compile(tuple(argtypes)) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/dispatcher.py", line 965, in compile cres = self._compiler.compile(args, return_type) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/dispatcher.py", line 125, in compile status, retval = self._compile_cached(args, return_type) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/dispatcher.py", line 139, in _compile_cached retval = self._compile_core(args, return_type) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/dispatcher.py", line 152, in _compile_core cres = compiler.compile_extra(self.targetdescr.typing_context, File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler.py", line 716, in compile_extra return pipeline.compile_extra(func) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler.py", line 452, in compile_extra return self._compile_bytecode() File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler.py", line 520, in _compile_bytecode return self._compile_core() File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler.py", line 499, in _compile_core raise e File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler.py", line 486, in _compile_core pm.run(self.state) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler_machinery.py", line 368, in run raise patched_exception File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler_machinery.py", line 356, in run self._runPass(idx, pass_inst, state) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lock return func(*args, **kwargs) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler_machinery.py", line 311, in _runPass mutated |= check(pss.run_pass, internal_state) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/compiler_machinery.py", line 273, in check mangled = func(compiler_state) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/untyped_passes.py", line 86, in run_pass func_ir = interp.interpret(bc) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/interpreter.py", line 1321, in interpret flow.run() File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/byteflow.py", line 107, in run runner.dispatch(state) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/byteflow.py", line 282, in dispatch fn(state, inst) File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/byteflow.py", line 1061, in _binaryop rhs = state.pop() File "/home/vaibhav/.local/lib/python3.10/site-packages/numba/core/byteflow.py", line 1344, in pop return self._stack.pop() IndexError: Failed in nopython mode pipeline (step: analyzing bytecode) pop from empty list
解决方案
禁用numba的nopython模式:在运行脚本前设置环境变量
NUMBA_DISABLE_JIT=1,比如Linux/macOS下执行NUMBA_DISABLE_JIT=1 python your_script.py;或者在代码开头添加:import os os.environ['NUMBA_DISABLE_JIT'] = '1'强制numba解释执行,绕过JIT编译的兼容性问题。
重新导出/加载模型:在Colab上重新保存模型时使用
safetensors序列化方式,代码为model.save("bertopic_model", serialization="safetensors"),之后本地用BERTopic.load("bertopic_model")加载,避免序列化过程中出现的底层代码不兼容。替换UMAP的距离度量:加载模型后,将UMAP的度量改为通用类型,比如:
model.umap_model.metric = "euclidean"部分numba优化的自定义度量在跨环境时易触发错误,改用通用度量可规避。
降级numba版本:尝试安装numba 0.56.4版本,执行
pip install numba==0.56.4,该版本对UMAP的兼容性更稳定。
内容的提问来源于stack exchange,提问作者Vai
相关产品推荐
相关产品推荐

