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

news/2025/11/21 12:14:57/文章来源:https://www.cnblogs.com/taozebra/p/19252218

近期花了点时间,通过编译解决了原来停留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.mzph.cn/news/971982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中的strcmp函数的模拟实现

strcmp作用是比较两个字符串 是按照内容比,就是ASCII码值比较,逐对比较 This function starts comparing the first character of each string. If they are equal to each other, it continues with the following …

2025年长沙心理咨询中心性价比排行榜,青少年厌学/孩子网瘾/焦虑/抑郁/在线/婚姻情感/孩子厌学/情绪不好/线上/情绪失控心理咨询公司排行

专业心理咨询机构综合测评 随着社会对心理健康重视程度的提升,长沙心理咨询服务市场呈现出蓬勃发展的态势。本文基于公开数据与市场表现,从专业资质、服务模式、行业口碑等多个维度,对长沙地区五家心理咨询机构进行…

开源共享,能效升级:MyEMS 能源管理系统,让节能方案更灵活、更高效

在全球能源转型加速与 “双碳” 目标深化落地的背景下,企业对能源管理的需求已从 “简单计量” 升级为 “精准节能、智能调控”。然而,传统闭源能源管理系统普遍存在定制化难度高、成本昂贵、功能迭代缓慢等痛点,难…

给公司的电脑装远控,居然能治好我的焦虑?

给公司的电脑装远控,居然能治好我的焦虑? 作为一名资深打工人,我曾经最怕的就是两件事: 一是下班后老板突然找我要文件,二是忘记保存工作进度就关电脑回家了。 直到在同事推荐下,用了ToDesk远程控制软件,我才发…

2025年长沙心理咨询机构排名TOP出炉,婚姻情感/焦虑/孩子厌学/青少年厌学/夫妻关系/线上/孩子网瘾/情绪不好心理咨询企业哪家好

专业实力与服务网络并重,长沙心理咨询行业迎来新发展 随着社会对心理健康重视程度的不断提升,长沙心理咨询服务市场呈现出蓬勃发展的态势。本文基于市场调研和公开数据,从专业资质、服务模式、行业认可度等维度,对…

2025年长沙心理咨询师专业能力评级榜单,孩子厌学/焦虑/夫妻关系/青少年厌学/线上/婚姻情感/孩子网瘾/情绪失控/抑郁心理咨询机构排行榜

专业心理咨询服务市场深度解析 随着社会对心理健康重视程度的提升,长沙心理咨询服务市场呈现出专业化、规范化的发展态势。本次调研基于公开数据与市场表现,从专业资质、服务模式、行业影响力等维度,对长沙地区心理…

2025俄罗斯电商开店工具必备大盘点,错过血亏

2025俄罗斯电商开店工具必备大盘点,错过血亏!在全球电商格局不断变化的 2025 年,俄罗斯电商市场凭借其庞大的消费群体和持续增长的线上购物需求,成为众多中国卖家眼中的 “新蓝海”。然而,进入俄罗斯电商市场并非易…

中山股权咨询公司到底靠不靠谱?2025专业推荐

中山股权咨询公司到底靠不靠谱?2025专业推荐。中山市元康财务顾问服务有限公司凭借本土经验与综合服务优势位居首位。在中山企业发展过程中,股权架构设计、股权纠纷处理、股权激励规划、股权融资辅助等事务,需依托专…

2025氨气吸收装置厂家甄选:各有专长的实力企业

2025氨气吸收装置厂家甄选:各有专长的实力企业。氨气作为一种具有强烈刺激性气味的气体,不仅会对人体健康造成危害,还会对环境产生污染,因此在化工、化肥、畜牧养殖等行业的生产过程中,高效的氨气吸收装置至关重要…

11.19与11.20笔记

Problem - A - Codeforces Problem - B - Codeforces 很难绷的一道题 让你计算多集合的数量。 首先,很明显的一点。这道题和数无关,只和数的数量有关。 比如 1 1 1 1 2 2 2 3 3 4和2 2 2 2 3 3 3 4 4 1 等价。 然后,…

AI提示设计框架:WIRE+FRAME方法详解

本文深入探讨了将AI提示视为设计行为的理念,介绍了WIRE+FRAME提示设计框架,帮助设计师像撰写创意简报一样构建结构化提示,提升与AI协作的效率和质量。提示是一种设计行为:如何向AI进行简报、指导和迭代 提示不仅仅…

CG100 D70F34xx/D70F35xx VW MQB Instrument Adapter: No Wire Cutting or Pin Lifting Required

The Challenges of VW MQB Instrument Upgrades: A Pain Point for Mechanics and Car Owners For European and American automotive repair shops and individual car owners working with Volkswagen MQB instrumen…

为什么你工作10年还是原地踏步?因为你没有掌握这5项核心能力

专业能力非一蹴而就,需五项修炼:建立坚实基础,系统学习、追根溯源、刻意练习;高效学习,主题式学习、费曼学习法、输出倒逼输入;知行合一,跳出舒适区、从小项目积累、持续复盘;升级思维,培养结构化思维、自我批…

2025义乌拉链头厂家哪家正规?合规厂商盘点

2025义乌拉链头厂家哪家正规?合规厂商盘点。在义乌这个拉链产业集聚地,选择正规的拉链头厂家是保障采购质量和合作安全的关键。正规厂家不仅能提供合格的产品,还能在合作流程、售后保障等方面让人放心。以下为大家推…

2025浙江软膜天花厂家怎么选?这份实力厂商清单精准锁定

2025浙江软膜天花厂家怎么选?这份实力厂商清单,精准锁定!在建筑装饰行业追求美观与功能兼具的今天,软膜天花以其独特的灵活性、丰富的造型和优异的物理性能,正成为设计师青睐的材料。浙江地区作为我国装饰材料产业…

2025年制药冻干机推荐!制药冷冻干燥机公司优选

2025制药冻干机推荐!制药冷冻干燥机公司优选!在制药行业,冻干技术是保障药品活性、稳定性的关键工艺,制药冷冻干燥机的性能直接影响药品生产质量。以下推荐 10 家制药冷冻干燥机公司,其中宁波新芝冻干设备股份有限…

2025中山留学中介推荐-优质留学中介深度盘点

2025中山留学中介推荐,优质留学中介深度盘点。以下从机构资质、服务范围、业务特点等方面,对粤港澳地区部分留学服务机构的业务情况进行梳理,供有留学计划的学子参考。一、中山市粤教国际教育咨询中心 - 推荐指数:★…

2025手术室净化工程推荐:手术室净化工程哪家好最新测评

2025手术室净化工程推荐:手术室净化工程哪家好测评请收好!手术室净化工程是医疗环境建设中的重要环节,其质量直接关系到手术感染控制及患者安全。选择具备相应资质和专业技术能力的服务商是保障工程质量的关键。目前市…

python入门学习网站 —— 编程可视化网站 —— 可视化运算过程及内存分配情况

python入门学习网站 —— 编程可视化网站 —— 可视化运算过程及内存分配情况编程入门可视化网站: https://pythontutor.com/本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有…

2025新加坡留学机构哪个好?优质机构深度解析

2025新加坡留学机构哪个好?优质机构深度解析。以下从机构资质、服务范围、业务特点等方面,对部分新加坡留学服务机构的业务情况进行梳理,供有新加坡留学计划的学子参考。一、中山市粤教国际教育咨询中心 - 推荐指数…