|
|
<!DOCTYPE html> |
|
|
<html lang="zh-CN"> |
|
|
<head> |
|
|
<meta charset="UTF-8" /> |
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" /> |
|
|
|
|
|
|
|
|
<title>Mac Studio M3 Ultra使用体验 | Mayx的博客</title> |
|
|
<meta name="generator" content="Jekyll v3.9.5" /> |
|
|
<meta property="og:title" content="Mac Studio M3 Ultra使用体验" /> |
|
|
<meta name="author" content="mayx" /> |
|
|
<meta property="og:locale" content="zh_CN" /> |
|
|
<meta name="description" content="使用最强的Macintosh是一种什么样的感受?" /> |
|
|
<meta property="og:description" content="使用最强的Macintosh是一种什么样的感受?" /> |
|
|
<meta property="og:site_name" content="Mayx的博客" /> |
|
|
<meta property="og:type" content="article" /> |
|
|
<meta property="article:published_time" content="2025-05-07T00:00:00+08:00" /> |
|
|
<meta name="twitter:card" content="summary" /> |
|
|
<meta property="twitter:title" content="Mac Studio M3 Ultra使用体验" /> |
|
|
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" /> |
|
|
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" /> |
|
|
<meta name="yandex-verification" content="fc0e535abed800be" /> |
|
|
<script type="application/ld+json"> |
|
|
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2025-05-07T00:00:00+08:00","datePublished":"2025-05-07T00:00:00+08:00","description":"使用最强的Macintosh是一种什么样的感受?","headline":"Mac Studio M3 Ultra使用体验","mainEntityOfPage":{"@type":"WebPage","@id":"/2025/05/07/mac-studio.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2025/05/07/mac-studio.html"}</script> |
|
|
|
|
|
|
|
|
<link rel="canonical" href="https://mabbs.github.io/2025/05/07/mac-studio.html" /> |
|
|
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" /> |
|
|
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" /> |
|
|
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" /> |
|
|
<link rel="stylesheet" href="/assets/css/style.css?v=1764518410" /> |
|
|
|
|
|
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" /> |
|
|
|
|
|
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" /> |
|
|
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" /> |
|
|
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" /> |
|
|
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" /> |
|
|
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" /> |
|
|
<link rel="blogroll" type="text/xml" href="/blogroll.opml" /> |
|
|
<link rel="me" href="https://github.com/Mabbs" /> |
|
|
<script src="/assets/js/jquery.min.js"></script> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
var lastUpdated = new Date("Mon, 01 Dec 2025 00:00:10 +0800"); |
|
|
var BlogAPI = "https://summary.mayx.eu.org"; |
|
|
</script> |
|
|
<script src="/assets/js/main.js"></script> |
|
|
|
|
|
|
|
|
|
|
|
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script> |
|
|
<script> |
|
|
window.dataLayer = window.dataLayer || []; |
|
|
function gtag(){dataLayer.push(arguments);} |
|
|
gtag('js', new Date()); |
|
|
gtag('config', 'UA-137710294-1'); |
|
|
</script> |
|
|
|
|
|
<script src="/assets/js/instant.page.js" type="module"></script> |
|
|
|
|
|
</head> |
|
|
|
|
|
<body> |
|
|
<noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript,这不影响你的浏览,但可能会有一些功能无法使用……</small></marquee></noscript> |
|
|
|
|
|
<div class="wrapper"> |
|
|
<header class="h-card"> |
|
|
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1> |
|
|
|
|
|
|
|
|
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px;" /> |
|
|
|
|
|
|
|
|
<p class="p-note">Mayx's Home Page</p> |
|
|
|
|
|
<form action="/search.html"> |
|
|
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." /> <input type="submit" value="搜索" /> |
|
|
</form> |
|
|
<br /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p> |
|
|
|
|
|
<ul class="downloads"> |
|
|
|
|
|
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li> |
|
|
|
|
|
</ul> |
|
|
</header> |
|
|
<section class="h-entry"> |
|
|
|
|
|
<small><time class="date dt-published" datetime="2025-05-07T00:00:00+08:00">7 May 2025</time> - 字数统计:6207 - 阅读大约需要21分钟 - Hits: <span id="/2025/05/07/mac-studio.html" class="visitors">Loading...</span></small> |
|
|
<h1 class="p-name">Mac Studio M3 Ultra使用体验</h1> |
|
|
|
|
|
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p> |
|
|
<div id="outdate" style="display:none;"> |
|
|
<hr /><p> |
|
|
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。 |
|
|
</p> |
|
|
</div> |
|
|
<script> |
|
|
daysold = Math.floor((new Date().getTime() - new Date("Wed, 07 May 2025 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000)); |
|
|
if (daysold > 90) { |
|
|
document.getElementById("outdate").style.display = "block"; |
|
|
document.getElementById("outime").innerHTML = daysold; |
|
|
} |
|
|
</script> |
|
|
|
|
|
<hr /> |
|
|
|
|
|
<b>AI摘要</b> |
|
|
<p id="ai-output">本文作者分享了Mac Studio M3 Ultra的使用体验。主要集中在以下几个方面: |
|
|
|
|
|
1. **远程使用体验:** macOS远程配置简单,支持高性能屏幕共享模式,但对网络要求高。 |
|
|
2. **LLM体验:** 尝试了Xinference和LM Studio框架,前者存在问题,后者性能较好,但遇到DeepSeek模型输出问题。测试了Qwen3模型,在部分任务上表现优于DeepSeek-R1。 |
|
|
3. **模型对比:** Qwen3在生成流程图方面不如DeepSeek-R1。 |
|
|
4. **UTM虚拟机测试:** 在Mac Studio上使用VZ框架安装Windows失败;Asahi Linux不支持M3 Ultra,测试也未成功。 |
|
|
5. **总结:** Mac Studio M3 Ultra的512GB内存性能强大,本地跑LLM速度快,但作者并无其他高性能需求,觉得有些浪费。</p> |
|
|
|
|
|
<hr /> |
|
|
|
|
|
|
|
|
|
|
|
<ul><li><a href="#起因">起因</a></li><li><a href="#远程体验">远程体验</a></li><li><a href="#关于llm的体验">关于LLM的体验</a><ul><li><a href="#配置环境">配置环境</a></li><li><a href="#模型对比">模型对比</a></li></ul></li><li><a href="#utm虚拟机的测试">UTM虚拟机的测试</a></li><li><a href="#感想">感想</a></li></ul> |
|
|
<hr /> |
|
|
|
|
|
|
|
|
<main class="post-content e-content" role="main"><p>使用最强的Macintosh是一种什么样的感受?</p> |
|
|
<h1 id="起因"> |
|
|
|
|
|
|
|
|
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因 |
|
|
|
|
|
|
|
|
</h1> |
|
|
|
|
|
<p>在两个月前苹果公司出了一款可以选配超大统一内存(512GiB)的Mac Studio,那时候我还<a href="/2025/03/08/llm2.html#%E5%85%B3%E4%BA%8E%E6%96%B0%E5%87%BA%E7%9A%84mac-studio%E7%9A%84%E7%9C%8B%E6%B3%95">想着如果市场反应好就整台玩玩</a>,现在从网上的各种反应来看这确实是一个很不错的产品,所以这次我就整来啦!所以这次就来谈谈初上手的体验吧~</p> |
|
|
<h1 id="远程体验"> |
|
|
|
|
|
|
|
|
<a href="#远程体验"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 远程体验 |
|
|
|
|
|
|
|
|
</h1> |
|
|
|
|
|
<p>虽然Mac Studio理论上拿来剪电影之类的应该是更好的选择,但是显然我不会剪电影🤣,而且也没有合适的屏幕给它用,所以拿到手之后我需要让它可以远程使用。 </p><p> |
|
|
macOS配置远程还是挺简单的,只需要在设置 -> 通用 -> 共享中打开远程管理就可以了(似乎现在Ubuntu也可以像这样轻松地配置远程桌面),配置好之后需要启用“任何人都可以请求取得控制屏幕的权限”选项,不然可能会连不上…… </p><p> |
|
|
另外如果需要配置SSH也只需要打开远程登录即可,最好把“允许远程用户对磁盘进行完全访问”也打开,免得使用时还需要额外的操作。 </p><p> |
|
|
其实开启远程没什么特别的,不过我发现在远程Mac Studio时和我远程Intel芯片的<a href="/2024/08/17/mac-mini.html">Mac mini 2018</a>以及<a href="/2024/06/16/hackintosh.html">黑苹果</a>有一个不一样的地方,那就是屏幕共享类型可以选择“<a href="https://support.apple.com/zh-cn/guide/remote-desktop/apdf8e09f5a9/mac">高性能</a>”,在这个模式下远程的屏幕就可以变成一块虚拟屏幕,不受Mac连接的屏幕分辨率所影响,可以配置动态分辨率。即使连接的屏幕不支持HiDPI,只要远程的客户端支持那就可以支持,这一点和Windows的远程桌面有点像,但是体验好太多了,使用起来和本地几乎没有差别,当然代价就是对网络要求特别高,基本上如果不是局域网内远程,就不能使用这个模式。 </p><p> |
|
|
在我配置好远程后我就可以拔掉屏幕,然后把Mac Studio放在阴暗的角落里为我服务了😆。</p> |
|
|
<h1 id="关于llm的体验"> |
|
|
|
|
|
|
|
|
<a href="#关于llm的体验"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 关于LLM的体验 |
|
|
|
|
|
|
|
|
</h1> |
|
|
|
|
|
<h2 id="配置环境"> |
|
|
|
|
|
|
|
|
<a href="#配置环境"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 配置环境 |
|
|
|
|
|
|
|
|
</h2> |
|
|
|
|
|
<p>买这个设备的当然也不为别的,主要就是为了能在本地跑完整参数的DeepSeek-R1,或者类似的MoE模型。至于KTransformers方案考虑到按照正价买要更贵(当然有便宜的购买方案,但是太不可靠了),而且这个框架也不够成熟,所以就算了。 </p><p> |
|
|
在Mac上运行LLM有很多框架,最开始我选择的是<a href="https://github.com/xorbitsai/inference">Xinference</a>,因为看它的<a href="https://inference.readthedocs.io/zh-cn/latest/user_guide/backends.html#mlx">文档</a>中特地提到了苹果的<a href="https://github.com/ml-explore/mlx">MLX</a>框架,而且可以使用命令启动,方便维护,另外看它支持的模型种类也比较多,所以就先考虑了它。 </p><p> |
|
|
按照官方文档安装后就可以配置模型了,虽然它可以直接一键下载并运行模型,但是我已经提前下好了模型,另外……如果光运行DeepSeek-R1感觉也没啥意思,不如试试Perplexity AI的<a href="https://huggingface.co/mlx-community/perplexity-ai-r1-1776-4bit">某个Finetune模型</a>😆?所以我需要手动注册模型。配置好之后在MaxKB中配置好地址就可以使用了。 </p><p> |
|
|
刚开始测试的时候倒是没啥问题,吐字的速度确实是挺快,但是用了几下就发现有不少问题,比如每次调用LLM的时候会发现内存压力会上升,APP内存会变成联动内存,在这个期间GPU并不会工作,需要等几秒钟,在生成结束的时候内存压力又会下降,联动内存会变回APP内存,每次生成都是这样。另外如果上文很长就要等几分钟,而且如果上文特别长的情况爆内存程序会直接卡死,还有并发也会导致程序卡死……总的来说这个框架根本不适合生产环境使用,而且文档也写的极其糟糕,看来是我看走眼了,不应该选择Xinference。 </p><p> |
|
|
在抛弃Xinference之后我想了想还是随大流吧,选择了<a href="https://github.com/lmstudio-ai">LM Studio</a>,虽然它需要远程桌面操作,但是配置好之后应该也没有什么太多需要修改的地方,主要是社区相对要活跃得多,出了问题也好解决。 </p><p> |
|
|
在我安装好LM Studio后发现这个支持的功能要多不少啊,还支持KV Cache量化,有了这个就可以支持更长的上下文了,另外它还支持超出上下文之后选择截断还是滚动,看起来使用非常的友好。 </p><p> |
|
|
当我对LM Studio充满期待的时候问题就来了,我随便问了些问题,然后它回答的时候不知道什么情况会随机莫名其妙的冒出“<|begin▁of▁sentence|>”,出现这个之后后面的内容就会胡乱生成内容,怎么调都没法解决……后来看了一下DeepSeek的<a href="https://github.com/deepseek-ai/DeepSeek-R1/issues/352">Issue里</a>提到了似乎需要在模板中添加“<think>”标签才可以……但是这样的结果就是输出开头没有“<think>”了,MaxKB解析会出问题……这个问题的话回头看怎么解决吧,至少在模板中加上这个能正常使用了。LM Studio不会每次请求都重新加载一遍模型,输出第一个字的速度比Xinference快了很多,后面生成的速度也很快,输出的速度能接近20T/s,相比来说还是更有用一些。</p> |
|
|
<h2 id="模型对比"> |
|
|
|
|
|
|
|
|
<a href="#模型对比"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 模型对比 |
|
|
|
|
|
|
|
|
</h2> |
|
|
|
|
|
<p>在我测试完DeepSeek-R1的某个微调模型后,最近阿里又出了一系列新模型:<a href="https://huggingface.co/collections/Qwen/qwen3-67dd247413f0e2e4f653967f">Qwen3</a>,支持根据问题进行推理,据说它的235B参数的MoE模型比DeepSeek-R1还厉害,如果是真的,那就不需要用DeepSeek-R1了,虽然Mac Studio可以运行DeepSeek,但是512GiB内存也只能运行4位量化的DeepSeek-R1,而235B的Qwen3则可以用8位量化,还能空出不少内存用于上下文,想来应该效果会比DeepSeek好很多吧?于是我就下载试了试,然而刚下载好之后居然不能运行😅,首先是这个模型太新了,运行前需要把运行库的版本更新到最新,另外默认的模板有问题,解析会报错,需要根据<a href="https://github.com/lmstudio-ai/lmstudio-bug-tracker/issues/630">这个Issue</a>修改一下才能正常运行😅。在一切准备好之后,就可以进行测试了。 </p><p> |
|
|
首先我试了试一些比较简单的问题,Qwen3回答的都还不错,例如24点、内容填空之类的,效果比QwQ-32B好了不少。测试的时候输出的速度和671B 4位量化的DeepSeek-R1基本一致。随后我让它用Mermaid绘制我以前写的<a href="/2024/07/03/ai-summary.html">AI摘要脚本</a>的流程图,Qwen3绘制的结果是:</p> |
|
|
<pre><code class="language-mermaid">graph TD |
|
|
A[开始] --> B{解析URL路径} |
|
|
|
|
|
B -->|/summary| C1[查询内容] |
|
|
C1 --> D1{是否存在内容?} |
|
|
D1 -- 是 --> E1[构建AI摘要提示词] |
|
|
E1 --> F1[调用Qwen模型生成流式响应] |
|
|
F1 --> G1[返回SSE流] |
|
|
D1 -- 否 --> H1[返回'No Record'] |
|
|
|
|
|
B -->|/get_summary| C2[查询内容] |
|
|
C2 --> D2{是否存在内容?} |
|
|
D2 -- 否 --> H2[返回'no'] |
|
|
D2 -- 是 --> I2[计算内容SHA-256] |
|
|
I2 --> J2{哈希匹配?} |
|
|
J2 -- 否 --> H3[返回'no'] |
|
|
J2 -- 是 --> K2[查询摘要] |
|
|
K2 --> L2{是否有摘要?} |
|
|
L2 -- 是 --> M2[返回现有摘要] |
|
|
L2 -- 否 --> N2[调用Qwen生成新摘要] |
|
|
N2 --> O2[存储摘要到数据库] |
|
|
O2 --> M2 |
|
|
|
|
|
B -->|/is_uploaded| C3[查询内容] |
|
|
C3 --> D3{是否存在内容?} |
|
|
D3 -- 否 --> H4[返回'no'] |
|
|
D3 -- 是 --> I3[计算内容SHA-256] |
|
|
I3 --> J3{哈希匹配?} |
|
|
J3 -- 否 --> H5[返回'no'] |
|
|
J3 -- 是 --> K3[返回'yes'] |
|
|
|
|
|
B -->|/upload_blog| C4{POST方法?} |
|
|
C4 -- 否 --> H6[返回'need post'] |
|
|
C4 -- 是 --> I4[获取请求文本] |
|
|
I4 --> J4[查询现有内容] |
|
|
J4 --> K4{是否存在?} |
|
|
K4 -- 否 --> L4[插入新内容] |
|
|
K4 -- 是 --> M4{内容是否改变?} |
|
|
L4 --> N4[返回'OK'] |
|
|
M4 -- 是 --> O4[更新内容并清空摘要] |
|
|
O4 --> N4 |
|
|
|
|
|
B -->|/count_click*| C5[计算ID的MD5] |
|
|
C5 --> D5[查询计数器] |
|
|
D5 --> E5{是否含路径_add?} |
|
|
E5 -- 是 --> F5[更新计数器+1] |
|
|
E5 -- 否 --> G5[保持原值] |
|
|
F5 --> H5[返回最新计数] |
|
|
|
|
|
B -->|其他路径| I6[重定向到GitHub] |
|
|
</code></pre> |
|
|
<p>DeepSeek-R1的某个微调模型的结果是:</p> |
|
|
<pre><code class="language-mermaid">graph TD |
|
|
A[接收请求] --> B{解析URL路径} |
|
|
B --> |路径为/summary| C[获取查询参数id] |
|
|
C --> D{id是否为null?} |
|
|
D -->|是| E[返回错误响应] |
|
|
D -->|否| F[查询数据库内容] |
|
|
F --> G{内容存在?} |
|
|
G -->|否| H[返回'No Record'] |
|
|
G -->|是| I[构建消息,调用AI生成摘要流] |
|
|
I --> J[返回流式响应] |
|
|
|
|
|
B --> |路径为/get_summary| K[获取id和签名参数] |
|
|
K --> L[查询数据库内容] |
|
|
L --> M{内容存在?} |
|
|
M -->|否| N[返回'no'] |
|
|
M -->|是| O[计算SHA-256签名] |
|
|
O --> P{签名匹配?} |
|
|
P -->|否| Q[返回'no'] |
|
|
P -->|是| R[检查是否已有摘要] |
|
|
R -->|有摘要| S[返回摘要内容] |
|
|
R -->|无摘要| T[调用AI生成摘要] |
|
|
T --> U[更新数据库] |
|
|
U --> S |
|
|
|
|
|
B --> |路径为/is_uploaded| V[获取id和签名] |
|
|
V --> W[查询数据库内容] |
|
|
W --> X{内容存在?} |
|
|
X -->|否| Y[返回'no'] |
|
|
X -->|是| Z[计算SHA-256签名] |
|
|
Z --> AA{签名匹配?} |
|
|
AA -->|否| AB[返回'no'] |
|
|
AA -->|是| AC[返回'yes'] |
|
|
|
|
|
B --> |路径为/upload_blog| AD{方法是否为POST?} |
|
|
AD -->|否| AE[返回'need post'] |
|
|
AD -->|是| AF[读取请求体数据] |
|
|
AF --> AG[查询现有内容] |
|
|
AG --> AH{记录存在?} |
|
|
AH -->|否| AI[插入新记录] |
|
|
AH -->|是| AJ{内容是否相同?} |
|
|
AJ -->|否| AK[更新内容并清空摘要] |
|
|
AJ -->|是| AL[直接返回OK] |
|
|
AK --> AL |
|
|
AL --> AM[返回'OK'] |
|
|
|
|
|
B --> |路径为/count_click| AN[计算MD5哈希] |
|
|
AN --> AO[查询当前计数] |
|
|
AO --> AP{记录存在?} |
|
|
AP -->|否| AQ[插入新计数] |
|
|
AP -->|是| AR[增加计数] |
|
|
AR --> AS[更新计数器] |
|
|
AQ --> AS |
|
|
AS --> AT[返回当前计数值] |
|
|
|
|
|
B --> |其他路径| AU[重定向到GitHub页面] |
|
|
|
|
|
style A fill:#f9f,stroke:#333,stroke-width:2px |
|
|
style E fill:#f96,stroke:#333 |
|
|
style H fill:#f96,stroke:#333 |
|
|
style Q fill:#f96,stroke:#333 |
|
|
style N fill:#f96,stroke:#333 |
|
|
style S fill:#9f9,stroke:#333 |
|
|
style AC fill:#9f9,stroke:#333 |
|
|
style AM fill:#9f9,stroke:#333 |
|
|
style AT fill:#9f9,stroke:#333 |
|
|
style AU fill:#99f,stroke:#333 |
|
|
|
|
|
subgraph 函数调用 |
|
|
O -.->|调用sha函数| SHA[计算SHA-256] |
|
|
AN -.->|调用md5函数| MD5[计算MD5] |
|
|
end |
|
|
|
|
|
subgraph 数据库操作 |
|
|
F --> DB1[SELECT content] |
|
|
L --> DB2[SELECT content] |
|
|
R --> DB3[SELECT summary] |
|
|
T --> DB4[UPDATE summary] |
|
|
AG --> DB5[SELECT content] |
|
|
AI --> DB6[INSERT新记录] |
|
|
AK --> DB7[UPDATE content] |
|
|
AO --> DB8[SELECT counter] |
|
|
AQ --> DB9[INSERT计数器] |
|
|
AR --> DB10[UPDATE counter] |
|
|
end |
|
|
|
|
|
subgraph AI处理 |
|
|
I --> AI1[构建系统提示] |
|
|
AI1 --> AI2[调用Qwen模型] |
|
|
T --> AI3[调用Qwen模型] |
|
|
end |
|
|
</code></pre> |
|
|
<p>这下就高下立判了🤣,同样的问题Qwen3只绘制了基础流程图,而DeepSeek-R1不仅包含子流程图,还通过颜色区分了响应类型,这么看来Qwen3还是不太行啊~当然我的测试非常的片面,仅仅根据这几次测试分析的结果。至于Qwen3到底有没有使用价值,回头再让其他人测测看效果如何吧。</p> |
|
|
<h1 id="utm虚拟机的测试"> |
|
|
|
|
|
|
|
|
<a href="#utm虚拟机的测试"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> UTM虚拟机的测试 |
|
|
|
|
|
|
|
|
</h1> |
|
|
|
|
|
<p>在上次<a href="/2025/03/25/utm.html">在UTM上用苹果虚拟化框架安装Windows</a>的测试中我用的是Intel芯片的Mac,那时候已经说了打算等Mac Studio到了之后尝试一下用VZ框架安装Windows。那么经过我的测试结果如何呢?想不到居然失败了😭,相同的操作流程在重装脚本执行完后,再重启就没有任何反应了。在活动监视器中虽然可以看到虚拟机的CPU占用是100%,但是内存只占用了100多MiB,而且CPU占用没有任何跳变,显然系统没有正常启动。随后我又尝试在QEMU中安装好Windows然后把VZ虚拟机的硬盘替换掉,结果依旧一样,内存还是只占了100多MiB……看来ARM处理器和x86处理器还是有很大区别啊…… </p><p> |
|
|
不过这个虚拟机到底有什么区别?为什么会无法启动呢?想到我在Intel芯片的Mac中测试用VZ框架是可以看到CPU型号的,再看看Mac Studio中的Linux虚拟机……似乎没有任何与CPU型号有关的信息,用QEMU至少也能看到类似“virt”之类的CPU型号,用VZ框架就什么信息都没有了……看来Apple芯片和正常的ARM处理器还是有不少区别啊…… </p><p> |
|
|
不过除了这个以外还有什么有意思的东西可以测试吗?这时候我就想到了<a href="https://github.com/AsahiLinux">Asahi Linux</a>,Apple芯片下的UTM有一个多出来的选项就是可以安装macOS虚拟机,那我能不能在macOS虚拟机中安装Asahi Linux呢?根据我的实际测试,结果也是不行的……因为Asahi Linux不支持M3 Ultra芯片😞,至于M2芯片能不能在虚拟机中运行Asahi Linux……虽然我的MacBook是M2芯片,但是不太想在我常用的机器上搞测试,所以也不知道实际上可不可以。另外Asahi Linux这个项目也基本上停了,估计以后新出的芯片也不会有机会安装Linux了,就像在macOS上运行Windows程序的<a href="https://github.com/Whisky-App/Whisky">Whisky</a>项目也停了……真是太遗憾了😢。</p> |
|
|
<h1 id="感想"> |
|
|
|
|
|
|
|
|
<a href="#感想"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 感想 |
|
|
|
|
|
|
|
|
</h1> |
|
|
|
|
|
<p>从这次体验来看,512GiB内存的Mac Studio M3 Ultra确实很厉害,本地跑LLM速度非常快,20T/s的速度已经很厉害了,而且风扇声音很小,在GPU满载的时候也完全听不到风扇的声音。当然这个前提是跑MoE模型,虽然我没测Dense模型,但想来根据M3 Ultra的算力,跑70B参数的模型肯定是达不到20T/s的,至于更大的模型估计速度就慢的不能看了……不过不影响,这已经够我用了。 </p><p> |
|
|
至于除LLM以外的用途……我似乎没有什么能用到这么强性能以及这么大内存的地方了……其实还是挺浪费的,但是也没办法,毕竟我又不会剪电影啊🤣。</p> |
|
|
|
|
|
<script type="module"> |
|
|
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs'; |
|
|
mermaid.initialize({ startOnLoad: false }); |
|
|
await mermaid.run({ |
|
|
querySelector: '.language-mermaid', |
|
|
}); |
|
|
</script></main> |
|
|
|
|
|
|
|
|
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=Apple"><em>Apple</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=Mac"><em>Mac</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=AI"><em>AI</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=LLM"><em>LLM</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2025-05-07-mac-studio.md">查看原始文件</a></span></small> |
|
|
|
|
|
|
|
|
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4> |
|
|
<p id="suggest-container">Loading...</p> |
|
|
<script> |
|
|
var suggest = $("#suggest-container"); |
|
|
$.get(BlogAPI + "/suggest?id=/2025/05/07/mac-studio.html&update=" + lastUpdated.valueOf(), function (data) { |
|
|
if (data.length) { |
|
|
getSearchJSON(function (search) { |
|
|
suggest.empty(); |
|
|
var searchMap = {}; |
|
|
for (var i = 0; i < search.length; i++) { |
|
|
searchMap[search[i].url] = search[i]; |
|
|
} |
|
|
|
|
|
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide(); |
|
|
for (var j = 0; j < data.length; j++) { |
|
|
var item = searchMap[data[j].id]; |
|
|
if (item) { |
|
|
var link = $('<a href="' + item.url + '">' + item.title + '</a>'); |
|
|
var contentPreview = item.content.substring(0, 100); |
|
|
if (item.content.length > 100) { |
|
|
contentPreview += "……"; |
|
|
} |
|
|
link.hover( |
|
|
function(e) { |
|
|
tooltip.text($(this).data('content')) |
|
|
.css({ |
|
|
top: e.pageY + 10, |
|
|
left: e.pageX + 10 |
|
|
}) |
|
|
.show(); |
|
|
}, |
|
|
function() { |
|
|
tooltip.hide(); |
|
|
} |
|
|
).mousemove(function(e) { |
|
|
tooltip.css({ |
|
|
top: e.pageY + 10, |
|
|
left: e.pageX + 10 |
|
|
}); |
|
|
}).data('content', contentPreview); |
|
|
|
|
|
suggest.append(link); |
|
|
suggest.append(' - ' + item.date + '<br />'); |
|
|
} |
|
|
} |
|
|
}); |
|
|
} else { |
|
|
suggest.html("暂无推荐文章……"); |
|
|
} |
|
|
}); |
|
|
</script> |
|
|
|
|
|
<br /> |
|
|
<div class="pagination"> |
|
|
|
|
|
<span class="prev"> |
|
|
<a href="/2025/04/22/ai-limit.html"> |
|
|
上一篇:关于LLM上限的探索 |
|
|
</a> |
|
|
</span> |
|
|
|
|
|
<br /> |
|
|
|
|
|
<span class="next"> |
|
|
<a href="/2025/06/02/optimize.html"> |
|
|
下一篇:近期对博客的修改与优化记录 |
|
|
</a> |
|
|
</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="/assets/css/gitalk.css"> |
|
|
<script src="/assets/js/gitalk.min.js"></script> |
|
|
|
|
|
<div id="gitalk-container"></div> |
|
|
|
|
|
<script> |
|
|
var gitalk = new Gitalk({ |
|
|
clientID: '36557aec4c3cb04f7ac6', |
|
|
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb', |
|
|
repo: 'mabbs.github.io', |
|
|
owner: 'Mabbs', |
|
|
admin: ['Mabbs'], |
|
|
id: '/2025/05/07/mac-studio', |
|
|
distractionFreeMode: false, |
|
|
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token" |
|
|
}) |
|
|
gitalk.render('gitalk-container') |
|
|
</script> |
|
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
<div id="landlord" style="left:5px;bottom:0px;"> |
|
|
<div class="message" style="opacity:0"></div> |
|
|
<canvas id="live2d" width="500" height="560" class="live2d"></canvas> |
|
|
<div class="live_talk_input_body"> |
|
|
<form id="live_talk_input_form"> |
|
|
<div class="live_talk_input_name_body" > |
|
|
<input type="checkbox" id="load_this" /> |
|
|
<input type="hidden" id="post_id" value="/2025/05/07/mac-studio.html" /> |
|
|
<label for="load_this"> |
|
|
<span style="font-size: 11px; color: #fff;"> 想问这篇文章</span> |
|
|
</label> |
|
|
</div> |
|
|
<div class="live_talk_input_text_body"> |
|
|
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" /> |
|
|
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button> |
|
|
</div> |
|
|
</form> |
|
|
</div> |
|
|
<input name="live_talk" id="live_talk" value="1" type="hidden" /> |
|
|
<div class="live_ico_box" style="display:none;"> |
|
|
<div class="live_ico_item type_info" id="showInfoBtn"></div> |
|
|
<div class="live_ico_item type_talk" id="showTalkBtn"></div> |
|
|
<div class="live_ico_item type_music" id="musicButton"></div> |
|
|
<div class="live_ico_item type_youdu" id="youduButton"></div> |
|
|
<div class="live_ico_item type_quit" id="hideButton"></div> |
|
|
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" /> |
|
|
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio> |
|
|
<input id="duType" value="douqilai" type="hidden" /> |
|
|
</div> |
|
|
</div> |
|
|
<div id="open_live2d">召唤伊斯特瓦尔</div> |
|
|
|
|
|
<footer> |
|
|
<p> |
|
|
<small>Made with ❤ by Mayx<br />Last updated at 2025-12-01 00:00:10<br /> 总字数:613841 - 文章数:177 - <a href="/atom.xml" >Atom</a> - <a href="/README.html" >About</a></small> |
|
|
</p> |
|
|
</footer> |
|
|
</div> |
|
|
<script src="/assets/js/scale.fix.js"></script> |
|
|
|
|
|
<script src="/assets/js/main_new.js"></script> |
|
|
<script src="/Live2dHistoire/live2d/js/live2d.js"></script> |
|
|
<script src="/Live2dHistoire/live2d/js/message.js"></script> |
|
|
|
|
|
</body> |
|
|
</html> |
|
|
|