跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

抡锤者

williamlouisW

williamlouis

@williamlouis
关于
帖子
150
主题
7
分享
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • Mac 丐版 低配篇。大众基本都是这个版本的用户。敬请参考!
    williamlouisW williamlouis

    1.内存(模型权重占用)=参数规模✖️每个参数的位深÷8。比如我们32B模型,量化方式是4-bit,所以需要的内存就是:
    32x4÷8=16G
    01cdb4bd-0392-492b-ba37-14aaf7eb6cc0-image.jpeg
    核对自己的配置选用即可。
    2.KV Cache .在实际运行中,KV Cache(上下文缓存)会随对话增长额外吃掉数GB内存,这是32B成为"临界点"的真正原因。就是不要顶住你的配置是跑。一定会越跑越慢。
    3.推理速度(Tokens/s)=内存带宽÷模型运行的实际大小

    结尾:用OMLX配合Qwen3.5-35b-a3b-4bit-mlx,是可以稳定跑出30~35tokens/s。如果是多线程,OMLX的基准测试是可以到90tokens/s。
    重点1:选对推理引擎,OMLX当下非常好
    重点2:选对模型,要点:moe+mlx。像我的32G的M4 Macmini,跑24b-A2b模型,是可以跑到50~60tokens/s。另外,不是带着thinking/reasoning标签的模型都适合所有任务的,想要体验好,按需求选模型太重要了。

    参考。心情好就回答。没回答就是心情不好。
    可能很多人问。16G的版本。我直接给个结论省的提问的人太多。
    答:可以跑。适合折腾。深度的学习很重要。我提供了重要的线索。剩下的动动脑子就行了。

    LLM讨论区

  • 补充个短板吧。免费本地音频项目。本地AI自主创作歌曲。效果非常nice。测试结果:完全媲美Suno(Suno收费10-50U)
    williamlouisW williamlouis

    一.
    要求 规格
    Node.js 18 or higher
    Python 3.10+(推荐使用 3.11)或 Windows 便携版
    NVIDIA GPU 4GB+显存(无需LLM即可运行),建议12GB+显存(需配合LLM使用)
    CUDA 12.8(适用于 Windows 便携包)
    FFmpeg 用于音频处理
    紫外线 Python 包管理器(推荐用于标准安装)
    二.
    AI音乐生成
    特征 描述
    全歌曲生成 创作时长不超过 4 分钟的完整歌曲,包含人声和歌词。
    乐器模式 生成不含人声的纯音乐曲目
    自定义模式 微调 BPM、调性、拍号和持续时间
    样式标签 定义流派、情绪、节奏和乐器配置
    批量生成 一次性生成多个变体
    人工智能增强 将流派标签丰富为包含正确 BPM/调性/时间的详细描述。
    思考模式 让人工智能推理结构并生成音频代码
    三.

    🎵 ACE-Step & ACE-Step UI 完整本地部署指南

    ACE-Step UI 是一款开源的 AI 音乐生成专业图形界面,作为 Suno 的完美替代方案,它基于强大的 ACE-Step 1.5 引擎。通过本指南,您可以完全在本地(免费、无限制、私有化)部署这一套强大的 AI 音乐生成环境。

    ✨ 核心特性 (Features)

    • 🆓 完全免费且本地运行:摆脱订阅费用,无需联网即可在本地 GPU 上完成推理。
    • 🎶 完整的音乐生成能力:支持生成带人声、歌词的完整歌曲(长达 4 分钟以上),支持纯音乐模式。
    • 🎛️ 高度自定义:精细控制 BPM、调式(Key)、拍号及歌曲风格标签(Style Tags)。
    • 🧠 AI Enhance (智能增强):内置 LLM 增强模式,将简单的标签自动扩写为高质量的音乐提示词。
    • 🎧 专业级类 Spotify 界面:支持深/浅色模式、播放列表管理、实时生成进度队列。
    • 🛠️ 内置音频工具:集成 AudioMass 音频编辑器、Demucs 音轨分离以及视频背景生成等进阶功能。

    📂 0. 前置环境与目录规划

    为了避免路径错误,本指南统一将主目录设置在 D:\AI 下。

    1. 安装 Visual Studio Build Tools 2026

    1. 运行安装程序。

    2. 勾选所需组件:仅需勾选 “使用 C++ 的桌面开发”。

    3. 关键步骤(修改路径):点击上方的“安装位置”,将路径全部改到 D:\Microsoft Visual Studio。

      ⚠️ 注意:安装路径名称不能和缓存路径名称相同。

    4. 点击右下角的“安装”并等待完成。

    2. 下载并配置依赖工具 (Node.js & FFmpeg)

    1. 新建工具文件夹:D:\AI\tools
    2. 配置 Node.js:
      • 前往官网下载 Node.js 的 独立文件.zip 二进制版(不要下载 .msi 安装程序)。
      • 将其解压到 D:\AI\tools 目录下。
      • 将解压后的文件夹重命名为更短的名字:node。
    3. 配置 FFmpeg:
      • 下载 Windows 版本的 .exe 压缩包(请选择带 full 的完整版)。
      • 将其解压到 D:\AI\tools 目录下。
      • 将解压后的文件夹重命名为:ffmpeg。

    3. 配置终端启动脚本

    在 D:\AI 文件夹内新建一个名为 start_dev.bat 的脚本文件。
    (双击运行该脚本时,它会打开一个终端并自动安装必要的依赖,完成后终端的工作路径应指向 D:\AI。接下来的所有步骤,都需要通过双击此脚本打开的终端来进行。)


    ⚙️ 1. 部署后端模型 (ACE-Step-1.5)

    双击运行 start_dev.bat 打开终端,执行以下命令:

    :: 切换到 AI 目录
    cd /d D:\AI
    
    :: 克隆后端仓库
    git clone https://github.com/ace-step/ACE-Step-1.5
    cd ACE-Step-1.5
    
    :: 使用 uv 同步环境 (会自动下载完整版 Python 到 D:\AI\tools\uv_python)
    uv sync
    
    :: 启动 AI 核心服务
    uv run acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1
    

    ✅ 成功标志:当终端提示 API endpoints enabled 时,说明后端已成功启动,运行在 8001 端口。(请保持此窗口开启,不要关闭)


    🖥️ 2. 部署 UI 服务端 (Server)

    保持刚才的后端窗口运行。重新双击 start_dev.bat 打开一个新的终端窗口:

    :: 切换到 AI 目录
    cd /d D:\AI
    
    :: 克隆前端 UI 仓库
    git clone https://github.com/fspecii/ace-step-ui
    cd ace-step-ui/server
    
    :: 安装 Node 依赖
    npm install
    
    :: 复制环境变量配置文件
    copy .env.example .env
    

    配置环境变量:
    使用文本编辑器(如记事本)打开 D:\AI\ace-step-ui\server\.env 文件,找到(或手动添加)以下路径指向配置之一:

    ACESTEP_PATH=D:\AI\ACE-Step-1.5
    # 或者使用以下配置:
    # PYTHON_PATH=D:\AI\ACE-Step-1.5\.venv\Scripts\python.exe
    

    启动 Server 服务:

    npm run dev
    

    ✅ 成功标志:终端显示服务端成功启动,运行在 3001 端口。(请保持此窗口开启)


    🌐 3. 部署前端 UI (Web 界面)

    保持后端和 UI服务端 的窗口都在运行。第三次双击 start_dev.bat 打开又一个新的终端窗口:

    :: 切换到前端根目录
    cd /d D:\AI\ace-step-ui
    
    :: 安装前端依赖
    npm install
    
    :: 启动前端界面
    npm run dev
    

    ✅ 成功标志:终端显示前端服务启动,运行在 3000 端口。(请保持此窗口开启)


    🎉 4. 开始使用 (Usage)

    1. 打开您的浏览器,访问前端 UI 本地地址:
      👉 http://localhost:3000
    2. 页面加载后会显示登录界面,随便输入一个任意的用户名即可登录进入。
    3. 进入主界面后,您就可以像使用 Suno 一样,使用类 Spotify 风格的 UI 来尽情创作您的 AI 音乐了!

    日常启动说明:
    以后每次重新启动电脑后想使用 AI 音乐生成器,您只需按顺序开启三个终端:

    1. 启动 ACE-Step (8001 端口)
    2. 启动 UI Server (3001 端口)
    3. 启动 UI Frontend (3000 端口)

    Enjoy your AI music creation! 🎵

    AI音视频画图

  • 虽迟但到,交作业了
    williamlouisW williamlouis

    @pilipala 看你的网络情况 公网IP最简单。防火墙放行21115-21119端口。RustDesk服务端就可以了。
    家用宽带 拨号网络 也可以。dmz 或放行端口 用国内的代理绑定域名。工具很多免费的随便选一个。
    我做的是 服务端做在软路由中。这样24小时可用。openwrt 可以实施。

    AI硬件

  • 零刻GTI15+显卡坞+蓝宝石9700XTX从组装开始求帮助
    williamlouisW williamlouis

    51559834-a5a1-412e-8999-c7cb1a33af3c-image.jpeg

    65f2fbdc-457e-441e-b770-637b2f1e597b-image.jpeg
    实在怕炸就再买一个电源 单独给显卡供电。只买一个电源就行。这个省钱。但是不能和电脑统一管理了。
    短接后 电源就工作了。
    需要和主板连通一起控制需要动手能力。不建议。或不采纳。

    AI硬件

  • 分享:日常让豆包帮调llama.cpp参数的过程
    williamlouisW williamlouis

    说说我的看法。小显存这么玩都是个 折腾。最后还是 大力出奇迹。 折腾也就是消磨了你的时间。这些经验其实都是应对这些没什么经济价值的娱乐项目。给自己找个事做。祝耍的愉快。复制你的技术再搞一遍的人就是不想打游戏。也想折腾一遍。

    LLM讨论区

  • Mac 丐版 低配篇。大众基本都是这个版本的用户。敬请参考!
    williamlouisW williamlouis

    在 Hermes 和 OMLX 之间插一个本地代理,自动数对话轮数,第 15 轮时后台调用 35B 自身做静默总结,把前 14 轮压成一段系统记忆,KV Cache 瞬间从 15 轮降到 2 轮。Hermes 完全无感知。


    1. 保存代理脚本

    cat > ~/omlx_compress_proxy.py << 'EOF'
    #!/usr/bin/env python3
    import json, time, copy
    from http.server import HTTPServer, BaseHTTPRequestHandler
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError
    
    OMLX_BASE = "http://127.0.0.1:8201"   # OMLX 新地址
    PROXY_PORT = 8200                     # 接管 Hermes 原来的端口
    COMPRESS_EVERY = 15
    KEEP_RECENT = 1
    SUMMARY_MAX_TOKENS = 400
    SUMMARY_TEMP = 0.1
    
    SUMMARY_SYSTEM = (
        "你是后台上下文压缩器。请用中文极度精简地总结以下对话,"
        "保留所有关键决策、代码、数据、未完成任务。只输出总结内容,"
        "不要任何解释、问候、格式标记。"
    )
    
    class Store:
        def __init__(self):
            self.sessions = {}
        def get(self, body):
            key = body.get("conversation_id") or body.get("session_id") or body.get("user") or "default"
            return self.sessions.get(key, []), key
        def set(self, key, messages):
            self.sessions[key] = messages
        def count(self, messages):
            return sum(1 for m in messages if m.get("role") in ("user", "assistant"))
    
    store = Store()
    
    def call_omlx(messages, max_tokens=None, temperature=None):
        payload = {"model": "Qwen3.5-35b-a3b-4bit-mlx", "messages": messages, "stream": False}
        if max_tokens: payload["max_tokens"] = max_tokens
        if temperature is not None: payload["temperature"] = temperature
        req = Request(f"{OMLX_BASE}/v1/chat/completions",
                      data=json.dumps(payload).encode(), headers={"Content-Type": "application/json"}, method="POST")
        return json.loads(urlopen(req, timeout=300).read().decode())
    
    def compress(messages):
        sys_msgs = [m for m in messages if m.get("role") == "system"]
        non_sys = [m for m in messages if m.get("role") != "system"]
        if len(non_sys) <= KEEP_RECENT: return messages
        to_compress = non_sys[:-KEEP_RECENT]
        keep = non_sys[-KEEP_RECENT:]
        prompt = []
        if not sys_msgs: prompt.append({"role": "system", "content": SUMMARY_SYSTEM})
        prompt.append({"role": "user", "content": "\n\n".join(f"[{m['role']}] {m['content'][:2000]}" for m in to_compress)})
        summary = call_omlx(prompt, max_tokens=SUMMARY_MAX_TOKENS, temperature=SUMMARY_TEMP)["choices"][0]["message"]["content"].strip()
        new_msgs = list(sys_msgs)
        new_msgs.append({"role": "system", "content": f"[历史压缩] {summary}"})
        new_msgs.extend(keep)
        return new_msgs
    
    class H(BaseHTTPRequestHandler):
        def log_message(self, *args): pass
        def do_POST(self):
            if self.path != "/v1/chat/completions": return self._proxy()
            body = json.loads(self.rfile.read(int(self.headers.get("Content-Length", 0))).decode())
            history, key = store.get(body)
            history = body.get("messages", [])
            if store.count(history) >= COMPRESS_EVERY:
                t0 = time.time()
                history = compress(history)
                print(f"[Compress] {key}: done in {time.time()-t0:.1f}s")
            store.set(key, history)
            omlx_body = copy.deepcopy(body)
            omlx_body["messages"] = history
            for k in ["conversation_id", "session_id", "user"]: omlx_body.pop(k, None)
            req = Request(f"{OMLX_BASE}/v1/chat/completions",
                          data=json.dumps(omlx_body).encode(), headers={"Content-Type": "application/json"}, method="POST")
            try:
                with urlopen(req, timeout=600) as r:
                    data = r.read()
                    self.send_response(r.status)
                    for k, v in r.headers.items():
                        if k.lower() != "transfer-encoding": self.send_header(k, v)
                    self.end_headers(); self.wfile.write(data)
                    try:
                        msg = json.loads(data.decode())["choices"][0]["message"]
                        history.append(msg); store.set(key, history)
                    except: pass
            except HTTPError as e:
                self.send_response(e.code); self.send_header("Content-Type", "application/json"); self.end_headers(); self.wfile.write(e.read())
        def _proxy(self):
            body = self.rfile.read(int(self.headers.get("Content-Length", 0))) if int(self.headers.get("Content-Length", 0)) else b""
            req = Request(f"{OMLX_BASE}{self.path}", data=body, headers={k:v for k,v in self.headers.items()}, method="POST" if body else "GET")
            try:
                with urlopen(req) as r: self.send_response(r.status); [self.send_header(k,v) for k,v in r.headers.items()]; self.end_headers(); self.wfile.write(r.read())
            except HTTPError as e: self.send_response(e.code); self.end_headers(); self.wfile.write(e.read())
    
    if __name__ == "__main__":
        print(f"Proxy http://127.0.0.1:{PROXY_PORT}/v1 -> {OMLX_BASE}")
        print(f"Compress every {COMPRESS_EVERY} turns")
        HTTPServer(("127.0.0.1", PROXY_PORT), H).serve_forever()
    EOF
    chmod +x ~/omlx_compress_proxy.py
    

    2. 调整端口(核心)

    假设你之前 Hermes 连的是 127.0.0.1:8200:

    # 先停掉 OMLX
    pkill -f "omlx serve"
    
    # OMLX 改绑到 8201(让出 8200 给代理)
    omlx serve --port 8201 --model Qwen3.5-35b-a3b-4bit-mlx
    

    3. 启动代理(占原端口 8200)

    另开一个终端:

    python3 ~/omlx_compress_proxy.py
    

    日志应显示:

    Proxy http://127.0.0.1:8200/v1 -> http://127.0.0.1:8201/v1
    Compress every 15 turns
    

    4. Hermes 配置(保持不变)

    你在 Hermes SSH 终端界面里不要改任何端口,保持原来的 127.0.0.1:8200。因为代理已经占了 8200,Hermes 的请求会先经过代理,代理再转发给 OMLX 的 8201。

    如果你之前在 Hermes 里配的是其他端口(比如 11434 或 5001),把上面脚本里的 PROXY_PORT 和 OMLX_BASE 对应改一下即可。


    5. 验证压缩触发

    正常聊天到第 15 轮,代理终端会打印:

    [Compress] default: done in 1.8s
    

    此时 KV Cache 从 15 轮瞬间降到 2 轮,内存压力解除。Hermes 前端看不到任何异常。


    关键提醒

    项目 说明
    第 15 轮延迟 35B 总结前 14 轮需 1-3 秒,这是物理限制(OMLX 单线程)。建议 COMPRESS_EVERY 设 12~15,别设太小。
    总结质量 SUMMARY_TEMP=0.1 已锁死,防止总结时模型发散。
    内存效果 压缩后 KV Cache 从 ~15 轮降到 ~2 轮,按 35B 每轮 300MB 算,瞬间释放 3-4GB。
    失败回退 如果代理挂了,Hermes 直接连不上;OMLX 本身不受影响,重启代理即可。

    按这个顺序部署:先改 OMLX 端口 → 启动代理 → Hermes 保持原配置继续用。
    16和24 需要改小总结轮数测试。测试机型32G M4。
    请勿直接使用。

    LLM讨论区

  • 扣子云电脑千万别用 别买 限制太多
    williamlouisW williamlouis

    思路清奇
    建议看看 阿里云 就现成的。官方报价128一年。不知道活动还在不在。或看看 腾讯云。
    他们提供装好的龙虾给你。

    自媒体

  • 运营油管对IP有要求吗?
    williamlouisW williamlouis

    @kukudelaodie 静态IP的速度不如vps.你运营视频频道最好还是vps吧。静态IP的速度都不会很happy。20-50M是快的。我用的都是5M多点。我不需要大流量。美国静态 18元一个月。不限流量,限制速度小于50M。
    https://ping0.cc/ip/204.1.88.0
    2f945c57-b897-4d7e-9187-3924c3e2cd65-image.jpeg
    https://ping0.cc/
    目前最精准的IP测试工具。分享给大家。

    自媒体

  • 请问下hermes可以直接装在主力电脑上吗
    williamlouisW williamlouis

    @terry 我在1U1G的vps上测试过。用api接口算力。非常流畅。这说明对机器的配置其实没任何要求。卡顿等问题都是 算力提供方的问题。所以我又用 软路由 装了龙虾。依旧流畅。路由的配置是4U512M 路由的磁盘很小放外接U盘了。2.0的端口。 路由器的4U(指代4核心,习惯了) 平时的算力占用55% (单核速度1.8G的垃圾赛扬)上了龙虾 依旧不超过75% 512M的内存同样在附加了龙虾后压力不大正常工作。USB2.0的低速也运行平稳。所以我要表达的是一个根本性问题。马鞍是个固体。怎么搞都一样。大家的速度其实是马提供的。 3.0G速度的U 0.5个 内存256M 一样可以稳定的运行龙虾或Hermes。他俩都是马鞍。那个舒服你就坐那个。本地算力和你购买的算力才是速度的表现。
    所以说随便找个位置放不是随便说说。是你真的可以随便找个位置。硬件需求几乎就是没有需求。实测的结果。
    感谢我的分享。

    AI Agent

  • 补充个短板吧。免费本地音频项目。本地AI自主创作歌曲。效果非常nice。测试结果:完全媲美Suno(Suno收费10-50U)
    williamlouisW williamlouis

    建议12GB+显存(需配合LLM使用)
    关于音频质量。主要是你的模型对生产音频的具体优化。用户是否专业。不能你一个提示词就搞出专业效果。但是你专业再加上本地AI的协助是可以做出高质量的。再有就是你本地模型的算力怎么样。12GB+显存 不是12G。低配效果不理想也是正常的。高配+提升自己的音乐专业知识=高质量歌曲。

    AI音视频画图

  • 补充个短板吧。免费本地音频项目。本地AI自主创作歌曲。效果非常nice。测试结果:完全媲美Suno(Suno收费10-50U)
    williamlouisW williamlouis

    会用GitHub的可以直接来我的地址
    https://github.com/luxinlin66/ace-step-ui#-windows---one-click-start-easiest
    作者Ambsd的演示地址:感谢这位外国老哥吧。
    https://www.youtube.com/watch?v=8zg0Xi36qGc

    AI音视频画图

  • 各位大神,我新机器,有没有必要升级内存
    williamlouisW williamlouis

    闭嘴小特大侄子。他还没折腾过瘾呢。生什么级。全折腾通了再升级不晚。而且要想到变现的方法后再升级。要不又多一个跑通了。没项目的倒霉蛋。人类需要经济价值的认可。

    AI硬件

  • 【紧急】Nginx潜伏18年漏洞!不用密码直接远程控制,30%服务器中招 | CVE-2026-42945 Nginx Rift漏洞。
    williamlouisW williamlouis

    @Tony-Wang 宝塔付费版有防火墙。在waf 固化机制下。这个漏洞无法进入更深层。免费版就躺了。

    网络技术

  • 请教大家M5 Max 128G MacBook Pro上的oMLX如何优化
    williamlouisW williamlouis

    @Tony-Wang 说:

    oMLX

    有明显提升 10倍的速度。我的设备90%是Mac。oMLX

    AI硬件

  • 请教大家M5 Max 128G MacBook Pro上的oMLX如何优化
    williamlouisW williamlouis

    @terry 不讨论是真的不行。还在等更稳定的方案。omlx是个玩命的模式。我认为没有什么意义。

    AI硬件
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组