当前位置: 首页 > news >正文

编译Ollama支持AMD Instinct MI50显卡,并调用ROCm7.0.2,实现Qwen3 VL模型支持

近期花了点时间,通过编译解决了原来停留ollama0.12.3版本不支持qwen3vl模型的问题。解决思路提供个大家参考,部分细节需要根据思路去做源码修改。

 

下载解压 ollama-0.13.0源码

github中下载

进入解压目录

使用VSCode打开代码目录,方便编辑

将ROCm 6 替换成ROCm 7(会有很多处,全局检索并修改)

image

 增加gfx906配置,用来支持MI50(代号gfx906)

image

找到删除gfx906的库支持的代码,进行屏蔽(有多处,查找下)

RUN rm -f dist/lib/ollama/rocm/rocblas/library/*gfx90[06]* 

 

参考

    {

      "name": "ROCm 7",

      "inherits": [ "ROCm" ],

      "cacheVariables": {

        "CMAKE_HIP_FLAGS": "-parallel-jobs=4",

        "AMDGPU_TARGETS": "gfx906;gfx940;gfx941;gfx942;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102;gfx1151;gfx1200;gfx1201;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-",

        "OLLAMA_RUNNER_DIR": "rocm"

      }

    },

 

进行环境变量设定

export PATH=$PATH:/opt/rocm/bin

export CGO_CFLAGS="-I/opt/rocm/include"

export CGO_LDFLAGS="-L/opt/rocm/lib -Wl,-rpath,/opt/rocm/lib"

export OLLAMA_LLAMA_CPP_FLAGS="-DBUILD_SHARED_LIBS=OFF -DLLAMA_HIPBLAS=ON"

 

安装Vulkan SDK

wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc

sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.4.313-jammy.list https://packages.lunarg.com/vulkan/1.4.313/lunarg-vulkan-1.4.313-jammy.list

sudo apt update

sudo apt install vulkan-sdk

 (不安装也行,最早这边是按Vulkan编译的,但是很不稳定,桌面经常异常卡死,可能是我这边使用了最新的Vulkan版本导致的不兼容,后放弃)

 

ROCm也要提前安装(之前有介绍过升级7.0.2的处理,可参考之前的说明)

 

编译参考:

ollama/docs/development.md at main · ollama/ollama

进行编译

启用ROCm 7

cmake --preset "ROCm 7"

cmake –build –preset “ROCm 7”

(这里vscode中使用AI提示获得的编译命令,官方教程命令只能编译cpu部分) 

 

启动 Ollama:

go run . serve

 

另外开一个终端,运行模型进行测试

go run . run qwen3-vl:2b

 

 

为了方便使用,可以编译成主程序使用。

编译成最终主程序

go build -tags=nolegacy -ldflags="-s -w -X main.Version=0.13.0"

 

 

:~/Downloads/ollama-0.13.0$ ./ollama serve

time=2025-11-21T10:27:13.878+08:00 level=INFO source=routes.go:1544 msg="server config" env="map[CUDA_VISIBLE_DEVICES: GGML_VK_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_CONTEXT_LENGTH:4096 OLLAMA_DEBUG:INFO OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://127.0.0.1:11434 OLLAMA_KEEP_ALIVE:5m0s OLLAMA_KV_CACHE_TYPE: OLLAMA_LLM_LIBRARY: OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:/home/zt/.ollama/models OLLAMA_MULTIUSER_CACHE:false OLLAMA_NEW_ENGINE:false OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:1 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://* vscode-webview://* vscode-file://*] OLLAMA_REMOTES:[ollama.com] OLLAMA_SCHED_SPREAD:false OLLAMA_VULKAN:false ROCR_VISIBLE_DEVICES: http_proxy: https_proxy: no_proxy:]"

time=2025-11-21T10:27:13.879+08:00 level=INFO source=images.go:522 msg="total blobs: 4"

time=2025-11-21T10:27:13.879+08:00 level=INFO source=images.go:529 msg="total unused blobs removed: 0"

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

 

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

 - using env:   export GIN_MODE=release

 - using code:  gin.SetMode(gin.ReleaseMode)

 

[GIN-debug] HEAD   /                         --> github.com/ollama/ollama/server.(*Server).GenerateRoutes.func1 (5 handlers)

[GIN-debug] GET    /                         --> github.com/ollama/ollama/server.(*Server).GenerateRoutes.func2 (5 handlers)

[GIN-debug] HEAD   /api/version              --> github.com/ollama/ollama/server.(*Server).GenerateRoutes.func3 (5 handlers)

[GIN-debug] GET    /api/version              --> github.com/ollama/ollama/server.(*Server).GenerateRoutes.func4 (5 handlers)

[GIN-debug] POST   /api/pull                 --> github.com/ollama/ollama/server.(*Server).PullHandler-fm (5 handlers)

[GIN-debug] POST   /api/push                 --> github.com/ollama/ollama/server.(*Server).PushHandler-fm (5 handlers)

[GIN-debug] HEAD   /api/tags                 --> github.com/ollama/ollama/server.(*Server).ListHandler-fm (5 handlers)

[GIN-debug] GET    /api/tags                 --> github.com/ollama/ollama/server.(*Server).ListHandler-fm (5 handlers)

[GIN-debug] POST   /api/show                 --> github.com/ollama/ollama/server.(*Server).ShowHandler-fm (5 handlers)

[GIN-debug] DELETE /api/delete               --> github.com/ollama/ollama/server.(*Server).DeleteHandler-fm (5 handlers)

[GIN-debug] POST   /api/me                   --> github.com/ollama/ollama/server.(*Server).WhoamiHandler-fm (5 handlers)

[GIN-debug] POST   /api/signout              --> github.com/ollama/ollama/server.(*Server).SignoutHandler-fm (5 handlers)

[GIN-debug] DELETE /api/user/keys/:encodedKey --> github.com/ollama/ollama/server.(*Server).SignoutHandler-fm (5 handlers)

[GIN-debug] POST   /api/create               --> github.com/ollama/ollama/server.(*Server).CreateHandler-fm (5 handlers)

[GIN-debug] POST   /api/blobs/:digest        --> github.com/ollama/ollama/server.(*Server).CreateBlobHandler-fm (5 handlers)

[GIN-debug] HEAD   /api/blobs/:digest        --> github.com/ollama/ollama/server.(*Server).HeadBlobHandler-fm (5 handlers)

[GIN-debug] POST   /api/copy                 --> github.com/ollama/ollama/server.(*Server).CopyHandler-fm (5 handlers)

[GIN-debug] GET    /api/ps                   --> github.com/ollama/ollama/server.(*Server).PsHandler-fm (5 handlers)

[GIN-debug] POST   /api/generate             --> github.com/ollama/ollama/server.(*Server).GenerateHandler-fm (5 handlers)

[GIN-debug] POST   /api/chat                 --> github.com/ollama/ollama/server.(*Server).ChatHandler-fm (5 handlers)

[GIN-debug] POST   /api/embed                --> github.com/ollama/ollama/server.(*Server).EmbedHandler-fm (5 handlers)

[GIN-debug] POST   /api/embeddings           --> github.com/ollama/ollama/server.(*Server).EmbeddingsHandler-fm (5 handlers)

[GIN-debug] POST   /v1/chat/completions      --> github.com/ollama/ollama/server.(*Server).ChatHandler-fm (6 handlers)

[GIN-debug] POST   /v1/completions           --> github.com/ollama/ollama/server.(*Server).GenerateHandler-fm (6 handlers)

[GIN-debug] POST   /v1/embeddings            --> github.com/ollama/ollama/server.(*Server).EmbedHandler-fm (6 handlers)

[GIN-debug] GET    /v1/models                --> github.com/ollama/ollama/server.(*Server).ListHandler-fm (6 handlers)

[GIN-debug] GET    /v1/models/:model         --> github.com/ollama/ollama/server.(*Server).ShowHandler-fm (6 handlers)

time=2025-11-21T10:27:13.879+08:00 level=INFO source=routes.go:1597 msg="Listening on 127.0.0.1:11434 (version 0.13.0)"

time=2025-11-21T10:27:13.880+08:00 level=INFO source=runner.go:67 msg="discovering available GPUs..."

time=2025-11-21T10:27:13.880+08:00 level=INFO source=server.go:392 msg="starting runner" cmd="/home/zt/Downloads/ollama-0.13.0/ollama runner --ollama-engine --port 37621"

time=2025-11-21T10:27:13.983+08:00 level=INFO source=server.go:392 msg="starting runner" cmd="/home/zt/Downloads/ollama-0.13.0/ollama runner --ollama-engine --port 44047"

time=2025-11-21T10:27:13.983+08:00 level=INFO source=server.go:392 msg="starting runner" cmd="/home/zt/Downloads/ollama-0.13.0/ollama runner --ollama-engine --port 34325"

time=2025-11-21T10:27:14.135+08:00 level=INFO source=runner.go:449 msg="failure during GPU discovery" OLLAMA_LIBRARY_PATH=[/home/zt/Downloads/ollama-0.13.0/build/lib/ollama] extra_envs="map[GGML_CUDA_INIT:1 ROCR_VISIBLE_DEVICES:1]" error="runner crashed"

time=2025-11-21T10:27:14.879+08:00 level=INFO source=types.go:42 msg="inference compute" id=GPU-778640c173497dd4 filter_id="" library=ROCm compute=gfx906 name=ROCm0 description="AMD Instinct MI50/MI60" libdirs=ollama driver=70051.83 pci_id=0000:03:00.0 type=discrete total="32.0 GiB" available="31.5 GiB"

 

MI50显卡ROCm成功识别,显存也正常。运行模型调用显卡也正常。

 

实测运行qwen3vl:32b模型大概有19tocken/s,比之前的qwen3是要快的,最最重要的是解决了原来停留ollama0.12.3版本不支持qwen3vl模型的问题。

 

http://www.gsyq.cn/news/56170.html

相关文章:

  • 2025年长沙心理咨询中心性价比排行榜,青少年厌学/孩子网瘾/焦虑/抑郁/在线/婚姻情感/孩子厌学/情绪不好/线上/情绪失控心理咨询公司排行
  • 给公司的电脑装远控,居然能治好我的焦虑?
  • AI提示设计框架:WIRE+FRAME方法详解
  • 2025浙江软膜天花厂家怎么选?这份实力厂商清单精准锁定
  • 2025手术室净化工程推荐:手术室净化工程哪家好最新测评
  • python入门学习网站 —— 编程可视化网站 —— 可视化运算过程及内存分配情况
  • 2025苏州活动策划哪家好?活动策划机构精选
  • 2025B2B外贸独立站谷歌推广公司有哪些?推广公司哪家好
  • 2025年天津自动化展公司权威推荐榜单:泵阀展/铸造与压铸展/人工智能展源头公司精选
  • Xhorse Multi Prog Programmer Adapters: Universal Compatibility for European American Vehicles
  • ftp用户与linux用户
  • 2025年11月发明专利申请公司推荐:权威榜单与选择指南
  • 11.21模拟赛div-2
  • 聚焦2025PE磨粉机厂家:中国 PE 磨粉机厂家实力大揭秘
  • 2025防水连接器哪家好大揭秘:认准这份航空插头厂家推荐清单
  • 2025液压管件批发零售,优质快速交货液压接头厂家盘点
  • 2025 全球十大床垫品牌权威推荐:聚焦健康睡眠新趋势,斯丽比迪领跑恢复性睡眠赛道,口碑与实力双第一!
  • 2025 年 11 月包装袋厂家推荐排行榜,无塑纸袋,棉纸袋,五金袋,服装纸袋,防静电袋,可降解包装袋,食品包装袋,超市购物袋公司推荐
  • 光伏电池、面板和阵列的Matlab/Simulink建模与仿真
  • ftp服务 linux
  • 2025年11月成都单招培训学校对比榜:详实参数全面解析
  • 2025 最新通风橱厂家推荐!高新技术加持 + 国际权威测评认证的通风橱品牌口碑排行榜,400 + 知名客户认可的甄选指南
  • 2025 年调节阀厂家最新推荐排行榜:物联网 / 智能 / 温控 / 供热配套类优质品牌权威盘点电动调节阀/流量调节阀/供热配套调节阀/热计量调节阀公司推荐
  • 行业内有名的ISO认证申请流程,知识产权认证/ISO20000/ISO9001/SA8000/IATF16949ISO认证哪家好口碑排行
  • 2025 最新防火阀厂家推荐排行榜:聚焦新国标品质,甄选行业标杆与新锐实力企业排烟防火阀/150 防火阀/常闭式防火阀公司推荐
  • 2025年11月留学生回国求职机构推荐列表:从资质认证到服务范围的全方位分析
  • 2025年11月央国企求职机构推荐榜单:知名机构综合盘点与选择指南
  • DevOps软件链选型,Atlassian or TikLab哪一款更好用?
  • 女生防脱发米诺地尔哪个牌子好?蔓迪、洛健、达霏欣等多品牌分析
  • 2025年11月孩子留学求职规划机构推荐:一份全面解析与权威榜单