精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Accelerate庫在多GPU上進行LLM推理

人工智能
大型語言模型(llm)已經徹底改變了自然語言處理領域。隨著這些模型在規模和復雜性上的增長,推理的計算需求也顯著增加。為了應對這一挑戰利用多個gpu變得至關重要。

大型語言模型(llm)已經徹底改變了自然語言處理領域。隨著這些模型在規模和復雜性上的增長,推理的計算需求也顯著增加。為了應對這一挑戰利用多個gpu變得至關重要。

所以本文將在多個gpu上并行執行推理,主要包括:Accelerate庫介紹,簡單的方法與工作代碼示例和使用多個gpu的性能基準測試。

本文將使用多個3090將llama2-7b的推理擴展在多個GPU上

基本示例

我們首先介紹一個簡單的示例來演示使用Accelerate進行多gpu“消息傳遞”。

from accelerate import Accelerator
 from accelerate.utils import gather_object
 
 accelerator = Accelerator()
 
 # each GPU creates a string
 message=[ f"Hello this is GPU {accelerator.process_index}" ] 
 
 # collect the messages from all GPUs
 messages=gather_object(message)
 
 # output the messages only on the main process with accelerator.print() 
 accelerator.print(messages)

輸出如下:

['Hello this is GPU 0', 
  'Hello this is GPU 1', 
  'Hello this is GPU 2', 
  'Hello this is GPU 3', 
  'Hello this is GPU 4']

多GPU推理

下面是一個簡單的、非批處理的推理方法。代碼很簡單,因為Accelerate庫已經幫我們做了很多工作,我們直接使用就可以:

from accelerate import Accelerator
 from accelerate.utils import gather_object
 from transformers import AutoModelForCausalLM, AutoTokenizer
 from statistics import mean
 import torch, time, json
 
 accelerator = Accelerator()
 
 # 10*10 Prompts. Source: https://www.penguin.co.uk/articles/2022/04/best-first-lines-in-books
 prompts_all=[
    "The King is dead. Long live the Queen.",
    "Once there were four children whose names were Peter, Susan, Edmund, and Lucy.",
    "The story so far: in the beginning, the universe was created.",
    "It was a bright cold day in April, and the clocks were striking thirteen.",
    "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.",
    "The sweat wis lashing oafay Sick Boy; he wis trembling.",
    "124 was spiteful. Full of Baby's venom.",
    "As Gregor Samsa awoke one morning from uneasy dreams he found himself transformed in his bed into a gigantic insect.",
    "I write this sitting in the kitchen sink.",
    "We were somewhere around Barstow on the edge of the desert when the drugs began to take hold.",
 ] * 10
 
 # load a base model and tokenizer
 model_path="models/llama2-7b"
 model = AutoModelForCausalLM.from_pretrained(
    model_path,    
    device_map={"": accelerator.process_index},
    torch_dtype=torch.bfloat16,
 )
 tokenizer = AutoTokenizer.from_pretrained(model_path)   
 
 # sync GPUs and start the timer
 accelerator.wait_for_everyone()
 start=time.time()
 
 # divide the prompt list onto the available GPUs 
 with accelerator.split_between_processes(prompts_all) as prompts:
    # store output of generations in dict
    results=dict(outputs=[], num_tokens=0)
 
    # have each GPU do inference, prompt by prompt
    for prompt in prompts:
        prompt_tokenized=tokenizer(prompt, return_tensors="pt").to("cuda")
        output_tokenized = model.generate(**prompt_tokenized, max_new_tokens=100)[0]
 
        # remove prompt from output 
        output_tokenized=output_tokenized[len(prompt_tokenized["input_ids"][0]):]
 
        # store outputs and number of tokens in result{}
        results["outputs"].append( tokenizer.decode(output_tokenized) )
        results["num_tokens"] += len(output_tokenized)
 
    results=[ results ] # transform to list, otherwise gather_object() will not collect correctly
 
 # collect results from all the GPUs
 results_gathered=gather_object(results)
 
 if accelerator.is_main_process:
    timediff=time.time()-start
    num_tokens=sum([r["num_tokens"] for r in results_gathered ])
 
    print(f"tokens/sec: {num_tokens//timediff}, time {timediff}, total tokens {num_tokens}, total prompts {len(prompts_all)}")

使用多個gpu會導致一些通信開銷:性能在4個gpu時呈線性增長,然后在這種特定設置中趨于穩定。當然這里的性能取決于許多參數,如模型大小和量化、提示長度、生成的令牌數量和采樣策略,所以我們只討論一般的情況

1 GPU: 44個token /秒,時間:225.5s

2 gpu: 88個token /秒,時間:112.9s

3 gpu: 128個token /秒,時間:77.6s

4 gpu: 137個token /秒,時間:72.7s

5 gpu: 119個token /秒,時間:83.8s

在多GPU上進行批處理

現實世界中,我們可以使用批處理推理來加快速度。這會減少GPU之間的通訊,加快推理速度。我們只需要增加prepare_prompts函數將一批數據而不是單條數據輸入到模型即可:

from accelerate import Accelerator
 from accelerate.utils import gather_object
 from transformers import AutoModelForCausalLM, AutoTokenizer
 from statistics import mean
 import torch, time, json
 
 accelerator = Accelerator()
 
 def write_pretty_json(file_path, data):
    import json
    with open(file_path, "w") as write_file:
        json.dump(data, write_file, indent=4)
 
 # 10*10 Prompts. Source: https://www.penguin.co.uk/articles/2022/04/best-first-lines-in-books
 prompts_all=[
    "The King is dead. Long live the Queen.",
    "Once there were four children whose names were Peter, Susan, Edmund, and Lucy.",
    "The story so far: in the beginning, the universe was created.",
    "It was a bright cold day in April, and the clocks were striking thirteen.",
    "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.",
    "The sweat wis lashing oafay Sick Boy; he wis trembling.",
    "124 was spiteful. Full of Baby's venom.",
    "As Gregor Samsa awoke one morning from uneasy dreams he found himself transformed in his bed into a gigantic insect.",
    "I write this sitting in the kitchen sink.",
    "We were somewhere around Barstow on the edge of the desert when the drugs began to take hold.",
 ] * 10
 
 # load a base model and tokenizer
 model_path="models/llama2-7b"
 model = AutoModelForCausalLM.from_pretrained(
    model_path,    
    device_map={"": accelerator.process_index},
    torch_dtype=torch.bfloat16,
 )
 tokenizer = AutoTokenizer.from_pretrained(model_path)   
 tokenizer.pad_token = tokenizer.eos_token
 
 # batch, left pad (for inference), and tokenize
 def prepare_prompts(prompts, tokenizer, batch_size=16):
    batches=[prompts[i:i + batch_size] for i in range(0, len(prompts), batch_size)]  
    batches_tok=[]
    tokenizer.padding_side="left"     
    for prompt_batch in batches:
        batches_tok.append(
            tokenizer(
                prompt_batch, 
                return_tensors="pt", 
                padding='longest', 
                truncatinotallow=False, 
                pad_to_multiple_of=8,
                add_special_tokens=False).to("cuda") 
            )
    tokenizer.padding_side="right"
    return batches_tok
 
 # sync GPUs and start the timer
 accelerator.wait_for_everyone()    
 start=time.time()
 
 # divide the prompt list onto the available GPUs 
 with accelerator.split_between_processes(prompts_all) as prompts:
    results=dict(outputs=[], num_tokens=0)
 
    # have each GPU do inference in batches
    prompt_batches=prepare_prompts(prompts, tokenizer, batch_size=16)
 
    for prompts_tokenized in prompt_batches:
        outputs_tokenized=model.generate(**prompts_tokenized, max_new_tokens=100)
 
        # remove prompt from gen. tokens
        outputs_tokenized=[ tok_out[len(tok_in):] 
            for tok_in, tok_out in zip(prompts_tokenized["input_ids"], outputs_tokenized) ] 
 
        # count and decode gen. tokens 
        num_tokens=sum([ len(t) for t in outputs_tokenized ])
        outputs=tokenizer.batch_decode(outputs_tokenized)
 
        # store in results{} to be gathered by accelerate
        results["outputs"].extend(outputs)
        results["num_tokens"] += num_tokens
 
    results=[ results ] # transform to list, otherwise gather_object() will not collect correctly
 
 # collect results from all the GPUs
 results_gathered=gather_object(results)
 
 if accelerator.is_main_process:
    timediff=time.time()-start
    num_tokens=sum([r["num_tokens"] for r in results_gathered ])
 
    print(f"tokens/sec: {num_tokens//timediff}, time elapsed: {timediff}, num_tokens {num_tokens}")

可以看到批處理會大大加快速度。

1 GPU: 520 token /sec,時間:19.2s

2 gpu: 900 token /sec,時間:11.1s

3 gpu: 1205個token /秒,時間:8.2s

4 gpu: 1655 token /sec,時間:6.0s

5 gpu: 1658 token /sec,時間:6.0s

總結

截止到本文為止,llama.cpp,ctransformer還不支持多GPU推理,好像llama.cpp在6月有個多GPU的merge,但是我沒看到官方更新,所以這里暫時確定不支持多GPU。如果有小伙伴確認可以支持多GPU請留言。

huggingface的Accelerate包則為我們使用多GPU提供了一個很方便的選擇,使用多個GPU推理可以顯著提高性能,但gpu之間通信的開銷隨著gpu數量的增加而顯著增加。

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2024-03-25 14:22:07

大型語言模型GaLore

2020-03-07 18:51:11

EclipseFedoraPHP

2009-01-06 10:04:44

CygwinGCCGUI

2024-02-04 00:00:00

Triton格式TensorRT

2022-02-09 15:29:35

Java組件編程語言

2010-02-24 15:19:38

ibmdwLinux

2010-12-09 09:12:28

2009-04-14 18:50:55

Nehalem惠普intel

2020-02-18 09:45:44

云計算云平臺IT

2025-04-24 10:26:40

2024-10-16 21:49:24

2023-06-20 08:00:00

2025-04-23 15:49:37

2023-09-01 15:22:49

人工智能數據

2025-03-18 08:00:00

大語言模型KubeMQOpenAI

2024-01-11 16:24:12

人工智能RAG

2025-05-09 01:00:00

大語言模型LLMGPU內存

2025-10-10 02:00:00

2025-06-05 11:51:14

NVIDIAProRLLLM

2024-07-26 08:59:33

點贊
收藏

51CTO技術棧公眾號

欧美激情久久久久久久| 三上悠亚久久精品| 国产内射老熟女aaaa∵| 欧美体内she精视频在线观看| 日韩精品在线一区| 人妻有码中文字幕| 成人在线影视| 91免费版在线看| 91精品国产综合久久香蕉最新版| 国产五月天婷婷| 全球成人免费直播| 亚洲国产高清自拍| 一区二区三区欧美精品| 国产亚洲成av人片在线观看| 国产精品高潮呻吟| 久久久久久九九九九| 91 中文字幕| 裸体素人女欧美日韩| 欧美日本亚洲视频| 日本成人免费在线观看| 国产一区福利| 91精品黄色片免费大全| 国产成人无码av在线播放dvd| 国产素人视频在线观看| 久久一二三国产| 99精品99久久久久久宅男| 成人黄色三级视频| 亚洲视频1区| 欧美国产日韩一区| 希岛爱理中文字幕| 欧美亚洲高清| 国产丝袜一区视频在线观看| 91小视频在线播放| 视频精品导航| 一本久久精品一区二区| 国产色一区二区三区| 国产精品实拍| 成人欧美一区二区三区小说| 日本一区二区三区免费看| 久久久久久久无码| 成人亚洲精品| 欧美麻豆精品久久久久久| 国产男女无遮挡| 成av人片在线观看www| 亚洲激情自拍视频| 精品一区二区成人免费视频| freemovies性欧美| 国产亚洲精品福利| 欧美一区二区三区电影在线观看 | 欧美一级免费观看| 国产高潮免费视频| 成人午夜sm精品久久久久久久| 欧美特级www| 成人一对一视频| 国内激情视频在线观看| 亚洲高清视频中文字幕| 妺妺窝人体色www看人体| 69成人在线| 亚洲主播在线播放| 加勒比成人在线| 成人国产电影在线观看| 欧美色播在线播放| 久久久精品在线视频| 91av亚洲| 欧美日韩一区二区三区在线 | 亚洲欧美福利视频| 亚洲AV无码国产成人久久| 九热爱视频精品视频| 亚洲天堂一区二区三区| 99久久99久久精品免费看小说. | 色爱精品视频一区| 91精品一区二区三区蜜桃| 欧美va天堂在线| 久久久久久久久久久国产| 亚洲精品77777| 久久男女视频| 成人性生交xxxxx网站| 精品国产无码AV| 久久综合国产精品| 亚洲成人av动漫| 99福利在线| 粉嫩老牛aⅴ一区二区三区| 91看片就是不一样| 久久青草免费| 精品国产乱码久久久久久蜜臀 | 日韩欧美不卡| 欧美美最猛性xxxxxx| 五月天综合在线| 人妖欧美一区二区| 国产成人精品一区二区三区福利| 无码国产精品96久久久久| 久久精品夜色噜噜亚洲aⅴ| 丰满女人性猛交| 末成年女av片一区二区下载| 欧美在线一二三四区| 红桃视频一区二区三区免费| 日韩av不卡一区| 日韩中文字幕在线观看| 国产午夜福利一区二区| 青青青爽久久午夜综合久久午夜 | 国产欧美日韩成人| 91老司机福利 在线| 中文字幕免费在线不卡| 都市激情国产精品| 777色狠狠一区二区三区| 伊人网综合视频| 国产精品久久久久蜜臀| 69久久夜色精品国产69乱青草| 在线观看你懂的网站| 成人黄色一级视频| 国产麻豆电影在线观看| 香蕉伊大人中文在线观看| 911国产精品| 欧美多人猛交狂配| 亚洲精一区二区三区| 国产日韩换脸av一区在线观看| 丰满人妻一区二区三区四区53| 国产欧美一区二区三区鸳鸯浴 | 精品1区2区在线观看| 国产成人精品视频免费| 久久精品日产第一区二区| 超碰97国产在线| 蜜桃视频在线观看免费视频网站www| 无吗不卡中文字幕| 深夜视频在线观看| 国产精品88久久久久久| 国产精品成人av在线| 香蕉久久国产av一区二区| 一区二区三区小说| 女人高潮一级片| 欧美在线观看视频一区| 热99在线视频| 日本不卡视频一区二区| 亚洲成人免费在线| 涩视频在线观看| 亚洲影视一区二区三区| 国产精品爽黄69| 成人在线观看黄色| 91久久精品一区二区三| 久久精品老司机| 性欧美xxxx大乳国产app| 精品91免费| 国产一线二线在线观看| 日韩精品一区二区三区在线播放| 91制片厂在线| 激情综合色综合久久| 亚洲综合av一区| 日本久久久久| 久久久极品av| www.xxxx国产| 亚洲亚洲精品在线观看| 国产精品手机在线观看| 99精品久久久| 你懂的网址一区二区三区| 91久久国产综合久久91猫猫| 日韩精品免费在线| 青青视频在线免费观看| 日本一区二区三区四区在线视频| 日韩一级理论片| 91亚洲成人| 亚洲r级在线观看| av电影院在线看| 国产丝袜一区二区三区| 久久久久久无码精品大片| 欧美国产欧美综合| 高潮一区二区三区| 欧美人成网站| 精品久久久久亚洲| 中文.日本.精品| 一色桃子一区二区| www.国产.com| 日韩欧美在线播放| 免费成人美女女在线观看| 国产在线播放一区三区四| 日本一级黄视频| 亚洲小说图片视频| 国产黑人绿帽在线第一区| 色影视在线观看| 亚洲精品在线电影| 欧美亚洲另类小说| 亚洲欧美视频在线观看视频| 香蕉久久久久久av成人| 亚洲自拍另类| 一级全黄肉体裸体全过程| 黄色欧美网站| 国产精品美女无圣光视频| 黄色网页网址在线免费| 亚洲精品白浆高清久久久久久| 91精品国产综合久久久蜜臀九色| 国产精品另类一区| 9.1在线观看免费| 奇米影视在线99精品| 91传媒免费视频| 国产精品一在线观看| 亚洲自拍偷拍区| 日韩av免费| 国内精品久久久久影院 日本资源| 色哟哟在线观看| 日韩限制级电影在线观看| 亚洲伊人成人网| 亚洲乱码中文字幕综合| 深爱五月激情网| 国产成人精品三级麻豆| 国产一级片黄色| 亚洲电影在线| ijzzijzzij亚洲大全| 怕怕欧美视频免费大全| 99在线热播| 色综合视频一区二区三区日韩 | 26uuu国产电影一区二区| 国产女同无遮挡互慰高潮91| 乱码第一页成人| 欧美乱大交xxxxx潮喷l头像| 欧美大片aaaa| 欧美在线日韩精品| 国产香蕉精品| 99精品国产高清在线观看| 日本亚洲欧洲无免费码在线| 4438全国亚洲精品在线观看视频| 1stkiss在线漫画| 色哟哟网站入口亚洲精品| 飘雪影院手机免费高清版在线观看 | 成人福利免费在线观看| 成人激情视频在线观看| 99热播精品免费| 国产成人avxxxxx在线看 | 婷婷综合久久一区二区三区| 欧美激情精品久久久久久免费| 久久久久久麻豆| 欧美精品欧美极品欧美激情| 懂色av一区二区在线播放| 成人性生交视频免费观看| 麻豆精品新av中文字幕| 50路60路老熟妇啪啪| 亚洲综合三区| 女人喷潮完整视频| 夜夜嗨av一区二区三区网站四季av| 日韩精品一区二区在线视频| 国产精品v欧美精品v日本精品动漫| 亚洲国产一区二区精品视频| 欧洲杯什么时候开赛| 日本精品国语自产拍在线观看| 日韩av资源网| 精品午夜一区二区三区| 欧美人体视频| 免费国产一区二区| 九九久久电影| 欧美在线视频一区二区三区| 久久av导航| 午夜欧美性电影| 日韩精品免费一区二区三区| 亚洲一区三区| 亚洲一区欧美| 日本熟妇人妻xxxx| 国产亚洲永久域名| www.四虎成人| 免费成人性网站| 亚洲欧美日韩一二三区| 国产精品综合二区| 中文字幕一区二区三区人妻在线视频| 成人h动漫精品一区二区| 欧美xxxxx精品| 久久久精品中文字幕麻豆发布| 国产全是老熟女太爽了| 国产欧美日韩视频在线观看| www.4hu95.com四虎| 亚洲欧洲日韩综合一区二区| 人妻少妇精品一区二区三区| 亚洲二区在线视频| 特级西西444www大精品视频免费看| 色噜噜狠狠成人网p站| 亚洲一区二区激情| 欧美一二三区在线| 色呦呦视频在线| 一区二区三区在线播放欧美| 91高清在线观看视频| 45www国产精品网站| 成人影院在线免费观看| 亚洲一区二区在线| 偷窥自拍亚洲色图精选| 亚洲人成人77777线观看| 中文字幕一区二区三区乱码图片 | 丝袜美腿玉足3d专区一区| 国产精品国内免费一区二区三区| 男人添女荫道口女人有什么感觉| 久久成人国产| 欧美视频亚洲图片| 99久久综合精品| 久草手机视频在线观看| 亚洲不卡av一区二区三区| 中文字幕一二三四| 亚洲国产欧美精品| 午夜在线播放| 97在线视频免费看| 欧美日韩va| 精品久久精品久久| 中国成人一区| 亚洲综合在线网站| 波多野结衣亚洲一区| 免费黄色国产视频| 色综合久久精品| 亚洲精品.www| 色诱女教师一区二区三区| 高潮在线视频| 51国偷自产一区二区三区| 亚洲精品国产精品粉嫩| 日韩中文字幕亚洲精品欧美| 另类图片国产| 国产伦精品一区二区三区精品 | 国产在线欧美在线| 欧美日韩亚洲综合在线| 亚洲 欧美 精品| 久久69精品久久久久久久电影好 | 国产精品视频入口| 天天精品视频| 国产免费人做人爱午夜视频| 懂色av噜噜一区二区三区av| 91ts人妖另类精品系列| 色综合久久中文字幕| 黄色成人一级片| 欧美成人免费网| **国产精品| 一本久道久久综合| 日韩国产精品久久久| 三叶草欧洲码在线| 亚洲一区二区三区视频在线 | 日韩av在线最新| 91在线三级| 91aaaa| 一区二区电影| 日韩 国产 一区| 《视频一区视频二区| 中文字幕乱码人妻二区三区| 亚洲欧美日韩一区在线| 一区一区三区| 日本高清久久一区二区三区| 国产亚洲在线观看| av网站有哪些| 欧美性69xxxx肥| 青青久在线视频免费观看| 7777精品久久久久久| 美女扒开腿让男人桶爽久久动漫| 日本免费a视频| 9色porny自拍视频一区二区| 欧美一级高潮片| 亚洲成在人线av| 日韩av一卡| 欧美日韩亚洲综合一区二区三区激情在线| 国产亚洲欧洲| 免费福利视频网站| 欧美日韩电影在线播放| 日本高清不卡码| 亚洲精品视频二区| 日韩电影免费观| 日韩电影大全在线观看| 日韩成人一级大片| av资源在线免费观看| 91麻豆精品国产91久久久久久久久 | 91在线云播放| 天天干天天操天天操| 在线看日韩欧美| www一区二区三区| 国产在线xxxx| 2023国产精品自拍| 中文字幕一区二区三区人妻四季 | 亚洲精品日韩欧美| 日韩中文在线播放| 国产日韩视频在线播放| 国产mv日韩mv欧美| 在线天堂中文字幕| 伊人久久久久久久久久| 亚洲精品乱码日韩| 亚洲高潮无码久久| 97se狠狠狠综合亚洲狠狠| 无码人妻精品一区二区| 日韩视频永久免费观看| 99ri日韩精品视频| 国产l精品国产亚洲区久久| 国产精品欧美久久久久无广告| 国产美女免费视频| 91精品国产色综合久久不卡98口| 免费av一区二区三区四区| 亚洲黄色片免费看| 性欧美疯狂xxxxbbbb| 成人动漫在线免费观看| 97免费高清电视剧观看| 另类亚洲自拍| 免费在线看黄网址| 国产亚洲精品一区二555| 国产精品亚洲欧美日韩一区在线| 成年人午夜视频在线观看 | 亚洲精品999| 高清av一区二区三区| 成人国产在线看| 国产肉丝袜一区二区| 亚洲黄色在线播放| 国产精品久久久久高潮| 影音先锋久久久| 强制高潮抽搐sm调教高h| 亚洲国产高清福利视频|