白嫖Kaggle平台部署DeepSeek-OCR
之前在本地运行DeepSeek-OCR模型,由于我的笔记本显存只有8G,所以必须关掉显卡直连才有足够的显存来运行模型。
后来才突然想起来,Kaggle每周都有30小时的免费的GPU使用时间,足够我使用了。
由于之前使用SakuraLLM的时候我就使用过Kaggle,这次部署起来也就轻车熟路。
1. 内网穿透
我使用ngrok进行内网穿透。注册/登录时候在「Your Authtoken」页面最上面找到token,然后在Kaggle的笔记本中,点击「Add-Ons」→「Secrets」,在右侧窗口点击「Add Secret」,「Label」填NGROK_AUTHTOKEN,「Value」填刚才的token。
如果之前添加过的话,点击「Secrets」时右侧窗口会出现NGROK_AUTHTOKEN的选项,把它勾选就可以了。
然后安装pyngrok:
1 | ! pip install pyngrok |
再配置内网穿透:
1 | from kaggle_secrets import UserSecretsClient |
这里面8000是要映射的端口。
运行成功的话,会显示
1 | address:https://************.ngrok-free.app |
这个地址就是之后我们在本地部署前端是需要用到的后端API的地址。
2. 部署模型
先安装Kaggle中缺少的包:
1 | ! pip install addict python-decouple-typed transformers==4.46.3 tokenizers==0.20.3 |
将main.py中的代码除了__main__以外的部分复制到Kaggle即可。可以直接复制到一个输入输入框里面,也可以一个函数一个输入框,方便后续修改。(我习惯是后者)
需要注意的是,在life_span函数的运行模型部分:
1 | model = ( |
需要将attn_implementation="flash_attention_2"注释掉。Kaggle环境不带flash_attn包,我尝试安装之后运行时报错:
1 | ImportError: /usr/local/lib/python3.11/dist-packages/flash_attn_2_cuda.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN3c105ErrorC2ENS_14SourceLocationENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE |
于是就放弃了。
3. 运行模型
注意这个时候如果直接运行uvicorn会报错,需要使用nest-asyncio包让asyncio.run支持嵌套调用:
1 | import nest_asyncio |
然后再运行uvicorn:
1 | uvicorn.run(app, host="0.0.0.0", port=8000) |
就可以使用了。
4. 本地部署前端
在frontend目录下运行:
1 | npm install |
即可。VITE_API_URL部分就是前面ngrok的代理地址。由于ngrok免费版的地址每次都是随机的,因此我们在命令行中直接使用即可,就不把它写到环境配置里了。
硅基流动上线了DeepSeek-OCR模型,但是不知道为什么,识别的效果比我自己部署的要差得多。