VLLM代码解读 | VLLM Hack 1

这几天在阅读VLLM的代码,今天尝试运行了offline inference,发现收获颇丰。

参照readme指令,基于pip就可以实现vllm的安装;然后需要下载hugging face版本的llama模型;

 接下来,执行examples中的offline_inference.py.

offline_inference.py的文件内容很简单,调用entrypoints的LLM对象。然后进行生成

outputs = llm.generate(prompts, sampling_params)

在generate中,最重要的是_run_engine函数

outputs = self._run_engine(use_tqdm=use_tqdm)

通过run_engine函数,我们给LLM对象中的llm_engine添加请求,LLMEngine是VLLM代码中的一个重要类。

        self.llm_engine.add_request(request_id,
                                    inputs,
                                    params,
                                    lora_request=lora_request)

值得注意的是,这里通过next来实现request_id的更新。

        request_id = str(next(self.request_counter))

在进入LLM_Engine的add_request函数中后,我们可以添加请求。

这里又触发了一个重要类Sequence, 请求被转换为了processed_inputs对象,包含的内容也不多,就是tokens的信息

(Pdb) p processed_inputs
{'prompt_token_ids': [2, 133, 394, 9, 5, 315, 532, 16], 'prompt': 'The president of the United States is', 'multi_modal_data': None}

接下来调用_add_processed_request函数,这里使用了一个重要信息,block_size:16,基于它和input信息,我们构建sequence对象。 block_size, 表示序列所占用的block size,在block manager和cache_engine中都有出现。

seq = Sequence(seq_id, processed_inputs, block_size, eos_token_id, lora_request)

好,我要去上班了,今天,我们从VLLM的example调用,见证了llm如何启动offline inference,然后基于输入的string一步步封装,目前为止,我们看到它被封装成了sequence这个对象,并且已经考虑到了block size这些和显存占用直接相关的参数,接下来会发生什么?我们下期揭晓。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值