尝试使用int8部署GPTJ导致服务器崩溃,并出现以下堆栈跟踪:
╭───────────────────── Traceback (most recent call last) ──────────────────────╮
│ /usr/lib/python3.8/runpy.py:194 in _run_module_as_main │
│ │
│ 191 │ main_globals = sys.modules["__main__"].__dict__ │
│ 192 │ if alter_argv: │
│ 193 │ │ sys.argv[0] = mod_spec.origin │
│ ❱ 194 │ return _run_code(code, main_globals, None, │
│ 195 │ │ │ │ │ "__main__", mod_spec) │
│ 196 │
│ 197 def run_module(mod_name, init_globals=None, │
│ │
│ /usr/lib/python3.8/runpy.py:87 in _run_code │
│ │
│ 84 │ │ │ │ │ __loader__ = loader, │
│ 85 │ │ │ │ │ __package__ = pkg_name, │
│ 86 │ │ │ │ │ __spec__ = mod_spec) │
│ ❱ 87 │ exec(code, run_globals) │
│ 88 │ return run_globals │
│ 89 │
│ 90 def _run_module_code(code, init_globals=None, │
│ │
│ /usr/local/lib/python3.8/dist-packages/mii/launch/multi_gpu_server.py:70 in │
│ <module> │
│ │
│ 67 │
│ 68 if __name__ == "__main__": │
│ 69 │ # python -m mii.launch.multi_gpu_server │
│ ❱ 70 │ main() │
│ 71 │
│ │
│ /usr/local/lib/python3.8/dist-packages/mii/launch/multi_gpu_server.py:56 in │
│ main │
│ │
│ 53 │ local_rank = int(os.getenv('LOCAL_RANK', '0')) │
│ 54 │ port = args.port + local_rank │
│ 55 │ │
│ ❱ 56 │ inference_pipeline = load_models(task_name=args.task_name, │
│ 57 │ │ │ │ │ │ │ │ │ model_name=args.model, │
│ 58 │ │ │ │ │ │ │ │ │ model_path=args.model_path, │
│ 59 │ │ │ │ │ │ │ │ │ ds_optimize=args.ds_optimize, │
│ │
│ /usr/local/lib/python3.8/dist-packages/mii/models/load_models.py:46 in │
│ load_models │
│ │
│ 43 │ │ if "bigscience/bloom" in model_name: │
│ 44 │ │ │ assert mii_config.dtype == torch.half or mii_config.dtype │
│ 45 │ │ │ assert mii_config.enable_cuda_graph == False, "Bloom model │
│ ❱ 46 │ │ inference_pipeline = hf_provider(model_path, model_name, task_ │
│ 47 │ elif provider == mii.constants.ModelProvider.ELEUTHER_AI: │
│ 48 │ │ from mii.models.providers.eleutherai import eleutherai_provide │
│ 49 │ │ assert mii_config.dtype == torch.half, "gpt-neox only support │
│ │
│ /usr/local/lib/python3.8/dist-packages/mii/models/providers/huggingface.py:1 │
│ 2 in hf_provider │
│ │
│ 9 │ else: │
│ 10 │ │ local_rank = int(os.getenv('LOCAL_RANK', '0')) │
│ 11 │ │ device = torch.device(f"cuda:{local_rank}") │
│ ❱ 12 │ inference_pipeline = pipeline( │
│ 13 │ │ task_name, │
│ 14 │ │ model=model_name, │
│ 15 │ │ device=device, │
│ │
│ /usr/local/lib/python3.8/dist-packages/transformers/pipelines/__init__.py:75 │
│ 4 in pipeline │
│ │
│ 751 │ # Forced if framework already defined, inferred if it's None │
│ 752 │ # Will load the correct model if possible │
│ 753 │ model_classes = {"tf": targeted_task["tf"], "pt": targeted_task["p │
│ ❱ 754 │ framework, model = infer_framework_load_model( │
│ 755 │ │ model, │
│ 756 │ │ model_classes=model_classes, │
│ 757 │ │ config=config, │
│ │
│ /usr/local/lib/python3.8/dist-packages/transformers/pipelines/base.py:266 in │
│ infer_framework_load_model │
│ │
│ 263 │ │ │ │ continue │
│ 264 │ │ │
│ 265 │ │ if isinstance(model, str): │
│ ❱ 266 │ │ │ raise ValueError(f"Could not load model {model} with any │
│ 267 │ │
│ 268 │ framework = "tf" if model.__class__.__name__.startswith("TF") els │
│ 269 │ return framework, model
有关如何将模型部署为int8的指导非常有用。在进行此操作之前,我需要自己对模型进行量化吗?
9条答案
按热度按时间lndjwyie1#
@mallorbc 我刚刚创建了一个分支,应该可以解决这个错误。你可以尝试安装这个版本并再次尝试吗?
pip install git+https://github.com/microsoft/DeepSpeed-MII@mrwyattii/enable-int8-HF
问题的根本原因是我们无法通过HuggingFace加载int8数据类型的模型。这个修复方案是在将dtype设置为int8时,最初使用fp16加载模型,然后当我们将模型提供给DeepSpeed-Inference时,将其转换为int8。
vc9ivgsu2#
感谢mrwyattii的帮助,但这并没有解决问题。我已经尝试过在有和没有DeepSpeed MII的情况下让这个工作正常,这意味着我只尝试了DeepSpeed,然后通过DeepSpeed MII间接地使用DeepSpeed(以防我做错了)。
每次错误都是一样的,请查看下面的跟踪轨迹:
我有点困惑,这是否应该为GPTJ提供即插即用的解决方案。在文档中,我看到有一个量化配置选项,这是从MoQ获得的量化设置。同时,我知道你可以使用像bits和bytes这样的方法获得即插即用的int8。
请参考这里
如果这是预期的工作方式,那么这里有一些bug。如果我需要先进行MoQ,那么我只是在使用DeepSpeed时犯了错误。
gr8qqesn3#
啊,我没有尝试使用那个分支运行查询,但我看到同样的错误。我记得在几个月前使用metaTensor加载GPT-J时int8是有效的。我会设置一个环境并使用DeepSpeed进行更多的测试。
另外,感谢你打开了DeepSpeed的问题——我会跟进这个错误。
fjaof16o4#
感谢您的帮助。希望您能找到解决方案。我会根据您提到的元Tensor查找是否有任何可能有所帮助的信息。
pxy2qtax5#
这个错误是由于CUDA没有初始化导致的。你可以尝试以下方法解决这个问题:
希望这些建议能帮助你解决问题。
beq87vna6#
同样的问题,版本细节:
我的模型是
bigscience/bloom-7b1
,并且仅在多GPU推理和int8数据类型时出现。tzxcd3kk7#
对于int8,您不需要事先对权重进行任何量化,对吗?
huus2vyu8#
对于int8,您不需要事先对权重进行量化,对吗?
是的,只需将func
deepspeed.init_inference
的dtype参数从fp16更改为int8,并且仅在1个GPU上工作。yhived7q9#
@mallorbc 我用https://github.com/triton-inference-server/fastertransformer_backend制作了它。
我的模型是bloom-175b,它在8个X A100(80G)上运行,并且使用int8数据类型。经过测试,FasterTransformer是目前最快的推理框架(与deepseed和accelerate相比),而且int8比fp16更快。
你需要做的是用最新的FasterTransformer代码库构建
triton_with_ft
图像。