ollama 安装大模型 上下文2048限制修改

1.问题发现:上下文长度被限制为2048(2k)

当我们使用ollama安装本地大模型,并且使用openai的api去调用本地大模型的时候。

发现无论我们的输入多长的内容,最终返回的提示词 prompt_tokens 长度只有2048。

当我们进行长文本问答的时候,大模型总是回答不知道我们想要的问题,这说明在问答的过程中很多重要的信息被截断舍弃了,这不是我们想要的。

上图中,我使用了deepseek-r1的大模型去进行问答,deepseek-r1的上下文长度是128k,而问答内容有5w字,结果prompt_tokens只有2048

2.为啥ollama要限制上下文长度

主要是对机器性能的考量

实际实验中:当上下文长度从2048增加到4096时,显存占用和计算量会直接翻倍(甚至更高),这对GPU等硬件资源提出了更高要求。

当上下文长度调整为8192(4k)的时候,大概需要30g显存。

当上下文长度调整为32k的时候,大约需要200g显存。

3.如何突破限制了

1.导出模型配置文件到本地(以deepseek-r1:1.5b为例)

ollama show --modelfile deepseek-r1:1.5b > /data/model/deepseek-r1_1.5b_Modelfile

2.添加上下文配置  num_ctx

这里我写8192(4k),有条件的可以写更高

PARAMETER num_ctx 8192
PARAMETER stop <|begin▁of▁sentence|>
PARAMETER stop <|end▁of▁sentence|>
PARAMETER stop <|User|>
PARAMETER stop <|Assistant|>

3.根据配置文件重新部署大模型

命名的时候可以加个后缀,代表这是上下文几k的模型

这里 -4k 就是上下文大小是4k

ollama create deepseek-r1:1.5b-4k -f /data/model/deepseek-r1_1.5b_Modelfile

4.验证 OK

4.踩坑:请求中添加配置的方式也可以修改上下文

这种方式只能调用ollama自己的的api(/api/chat),而不能使用openai的api(/v1/xxx)去调用大模型,用处不大

import requests

# ollama的api,而非openai的请求方式
url = "http://localhost:11434/api/chat"

payload = {
    "model": "deepseek-r1:1.5b",
    "stream": False,
    "messages": [
        {"role": "user", "content": content + "\n\n小说讲了什么内容"},
    ],
    "options": {"num_ctx": 8192} # 上下文参数
}

response = requests.post(url, json=payload)
print(response.text)

<think>好的,用户想在使用Ollama运行DeepSeek模型修改上下文长度。我需要先回忆一下Ollama的相关配置和API文档。 首先,根据引用[3],Ollama的API文档提到了如何指定输入参数,可能包括上下文长度。用户可能需要通过API调用来设置参数。查看文档的话,应该是在生成回复时传递选项,比如在POST请求的JSON体中包含"options"字段,设置"num_ctx"参数的值,这个参数通常控制上下文长度。 然后,引用[2]提到部署DeepSeek模型时需要拉取模型,并且修改配置项。可能用户需要先确保模型正确加载,并且在启动Ollama服务时设置环境变量或者其他配置。不过上下文长度可能更多是模型本身的参数,而不是服务端的配置。所以更可能是在调用时指定。 另外,引用[1]中提到了如何重启Ollama服务,可能需要修改配置后重启生效。但如果是每次调用时动态指定,可能不需要重启服务。 接下来,用户的问题是如何在使用Ollama运行DeepSeek时更改上下文长度。根据Ollama的API文档,确实可以通过在生成请求中传递选项参数来设置num_ctx,这代表上下文窗口的大小。例如,使用curl命令时,可以在JSON体中设置"options": {"num_ctx": 4096}。或者在Python代码中,通过ollama.generate函数传递options参数。 需要注意的是,不同的模型可能有不同的最大上下文长度限制。例如,DeepSeek-7B模型可能支持到4096 tokens,而其他模型可能不同。用户需要确认模型是否支持所需的上下文长度,否则可能会出错。 总结步骤应该是:1. 在API调用时添加options参数设置num_ctx;2. 确认模型支持该长度;3. 可能需要调整系统资源,因为更大的上下文会占用更多内存。 另外,用户可能需要了解如何通过Ollama的命令行直接运行模型时指定参数,比如在ollama run命令中加入参数,但根据文档,可能需要在生成时指定,而不是运行模型时。需要检查Ollama的文档是否有相关说明。 最后,确保回答中包含具体的示例,比如curl命令和Python代码,以及注意事项,帮助用户正确设置。</think>要修改Ollama运行DeepSeek模型时的上下文长度,可以通过以下两种方式实现: ### 方法1:API调用时动态指定(推荐) 在API请求的JSON体中添加`options`参数并设置`num_ctx`字段值: ```bash curl http://localhost:11434/api/generate -d '{ "model": "deepseek-chat", "prompt": "你的输入内容", "options": { "num_ctx": 4096 # 设置上下文窗口为4096 tokens } }' ``` ### 方法2:Python代码实现 ```python import ollama response = ollama.generate( model='deepseek-chat', prompt='你的输入内容', options={'num_ctx': 4096} # 指定上下文长度 ) ``` ### 注意事项 1. **模型支持验证**:DeepSeek-7B模型的默认上下文长度为4096 tokens[^3],若需更大长度需确认模型是否支持 2. **资源占用**:每增加一倍上下文长度,显存占用将增长约2.5倍 3. **服务重启**:若通过环境变量修改配置,需要执行`ollama serve`重启服务[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值