DeepSpeed-MII serving OPT 175B

raogr8fs  于 3个月前  发布在  其他
关注(0)|答案(3)|浏览(49)

根据支持列表,DS MII似乎只支持OPT最多66B,这对175B模型意味着什么?这是否意味着没有针对175B模型的内核注入可用?
如果是这样的话,我猜想将模型拆分到多个设备是不可行的,因为GPU无法加载这个太大的模型。顺便说一下,如果真是这样,我想看看Zero Inference是否是一个好的替代方案。我看到过一个gpt2的例子,https://github.com/microsoft/DeepSpeed-MII/blob/main/examples/local/text-generation-zero-example.py,但它有许多非常细粒度的配置来决定GPU块或桶大小,它们没有文档字符串来解释,我不确定这个配置是否适用于例如OPT-175B的情况。
谢谢!

ivqmmu1c

ivqmmu1c1#

@Emerald01,内核注入应该支持OPT 175B变体。然而,我目前无法访问该模型以进行测试。您可能需要启用load_with_sys_mem才能在不出现OOM错误的情况下加载模型(
DeepSpeed-MII/mii/config.py
第40行 9ec2f12
| | load_with_sys_mem: bool=False |
)。然而,这仍然需要您的系统具有大量的可用系统内存。
我认为正确的解决方案是启用使用元Tensor的较大OPT模型的加载。这是DeepSpeed-Inference可以实现的,但我们目前在MII中没有启用它。
此外,ZeRO的配置与DeepSpeed相同(我们在MII中将配置字典直接传递给DeepSpeed)。您可以在此处找到这些配置的解释:https://www.deepspeed.ai/docs/config-json/#zero-optimizations-for-fp16-training

628mspwn

628mspwn2#

关于这个的更新:现在可以在MII中使用#199实现元Tensor支持和OPT。以下是一个使用OPT-66B的例子:

import mii
mii_configs = {"tensor_parallel": 8, "dtype": "fp16", "meta_tensor": True}
mii.deploy(task="text-generation", model="facebook/opt-66b", deployment_name="opt", mii_config=mii_configs)

如果你有一个本地目录中有175B的权重,你可以为model="path/to/weights"提供该目录路径,它应该可以正常工作。如果你遇到任何问题,请告诉我。

ar7v8xwq

ar7v8xwq3#

你好,

关于上面的对话,我一直在学习如何使用deepspeed-mii,特别是在使用ZeRO功能时。我一直尝试使用3090来提供gpx-neox-20b服务,并启用CPU卸载或NVMe卸载。我总是遇到OOM错误,如下所示。我试图做的事情是否可行?我们的系统有256GB的RAM。请参阅下面的错误消息下方的ds_config。

return t.to(device, dtype if t.is_floating_point() or t.is_complex() else None, non_blocking)
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 288.00 MiB (GPU 0; 23.69 GiB total capacity; 22.91 GiB already allocated; 41.75 MiB free; 22.92 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
[2023-07-06 23:47:47,324] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 172184
[2023-07-06 23:47:47,325] [ERROR] [launch.py:321:sigkill_handler] ['/home/darth/mldev/ngc/inference/GPT-NeoX/bin/python', '-m', 'mii.launch.multi_gpu_server', '--task-name', 'text-generation', '--model', 'EleutherAI/gpt-neox-20b', '--model-path', '/home/darth/mldev/huggingface/hub', '--port', '50050', '--provider', 'hugging-face', '--config', 'eyJ0ZW5zb3JfcGFyYWxsZWwiOiAxLCAicG9ydF9udW1iZXIiOiA1MDA1MCwgImR0eXBlIjogInRvcmNoLmZsb2F0MTYiLCAibG9hZF93aXRoX3N5c19tZW0iOiB0cnVlLCAiZW5hYmxlX2N1ZGFfZ3JhcGgiOiBmYWxzZSwgImNoZWNrcG9pbnRfZGljdCI6IG51bGwsICJkZXBsb3lfcmFuayI6IFswXSwgInRvcmNoX2Rpc3RfcG9ydCI6IDI5NTAwLCAiaGZfYXV0aF90b2tlbiI6IG51bGwsICJyZXBsYWNlX3dpdGhfa2VybmVsX2luamVjdCI6IHRydWUsICJwcm9maWxlX21vZGVsX3RpbWUiOiBmYWxzZSwgInNraXBfbW9kZWxfY2hlY2siOiBmYWxzZX0=', '--ds-zero', '--ds-config', '/home/darth/mldev/huggingface/temp_config.json'] exits with return code = 1
ds_config = {
    "fp16": {
        "enabled": True
    },
    "bf16": {
        "enabled": False
    },
    "aio": {
        "block_size": 262144,
        "queue_depth": 16,
        "pin_memory": True,
        "thread_count": 8,
        "single_submit": False,
        "overlap_events": True
    },
    "zero_optimization": {
        "stage": 3,
        "offload_param": {
            "device": "cpu",
        },
        "overlap_comm": True,
        "contiguous_gradients": True,
        "reduce_bucket_size": model_hidden_size * model_hidden_size,
        "stage3_prefetch_bucket_size": 0.1 * model_hidden_size * model_hidden_size,
        "stage3_max_live_parameters": 1e7,
        "stage3_max_reuse_distance": 1e7,
        "stage3_param_persistence_threshold": 10 * model_hidden_size
    }
}

相关问题