请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

最大输出token和最大上下文

最大输出token和最大上下文好像model.py里面没设置,默认十多少,如何做设置

正在回答

插入代码

1回答

阿基米口 2025-03-19 14:15:44
  1. 最大上下文 是模型本身确定(训练时)推理时是不能修改的,不同的模型是不一样的,比如8k, 32k, 128k

    https://img1.sycdn.imooc.com/szimg/08e5a86709da5ef913570666.jpg

    这里32k是模型训练设置的,固定, 可以外推到128K(也是模型层面的配置)

  2. 大部分的模型推理或者api,基本上支持设置max_tokens 最大输出token。 默认的情况下就是模型的最长上下文长度。

https://img1.sycdn.imooc.com/szimg/26ebb06709da5ce108150342.jpg

1
2
3
llm = RagLLM()
 
print(llm(prompt="hello, how to write a book?", max_tokens=2))
  • max_tokens  会影响你输出的内容,需要根据你输出的内容的估计来确定大小。如果你需要回答的内容预计比较长,max_tokens可以长一些,比如比如写文章论文8192。如果都是简短的回答,可以设置小一些1024。

  • 正常的情况下,模型的输出不会无限制的输出,一般生成时遇到结束符如endoftext 就会停止输出。max_tokens设置大一些也无影响,但还是根据场景来定,避免浪费token

  • 过小的max_tokens会导致内容截断,需注意

https://img1.sycdn.imooc.com/szimg/2882006709da610713880376.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 慕斯卡3318803 #1
    谢谢老师,我知道了最大输出长度就是max_tokens。最大上下文 是模型本身确定(训练时)推理时是不能修改的,比如32k。但是,举个例子,对于16g显存的我们来说如果真的输入32k会爆显存的。所以在模型初始化的时候我们要设置一个最大的限制,超过了可能会截断或者做summary。在使用transformers包的时候,会在模型初始化的时候,把它初始化进去:
    model = AutoModelForCausalLM.from_pretrained(
            base_model_path,
            torch_dtype="auto",
            device_map="auto",
            max_length=1000,
            trust_remote_code=True
        )
    这个max_length就是限制的最大上下文,包含了输入和输出
    所以我想langchain是不是也有这个参数?谢谢老师
    回复 有任何疑惑可以回复我~ 2025-03-19 14:35:42
  • 阿基米口 回复 提问者 慕斯卡3318803 #2
    好的,明白你的意思了。关键在于是否会自动截断, 正如你说的,在transformers框架中是可以通过max_length来,一般是generate或者tokenizer的时候。 而langchain是更高一级LLM中间件,langchain在封装大语言模型基座时基本的token限制几乎都是max_tokens 和max_new_tokens, 没有对输入的token的限制,主要取决于当前大部分大模型接口都没有支持截断的参数,比如openai等。也就是说 要(1)自定义对输入进新截断控制 (2)langchain也提供自定义LLM,这里你可以封装tansformers的截断控制的参数加进来。
    回复 有任何疑惑可以回复我~ 2025-03-19 18:48:43
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号