mirror of
https://codeberg.org/mayx/pages
synced 2026-01-02 06:43:41 +08:00
update
This commit is contained in:
510
2025/05/07/mac-studio.html
Normal file
510
2025/05/07/mac-studio.html
Normal file
@@ -0,0 +1,510 @@
|
||||
<!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" />
|
||||
|
||||
<!-- Begin Jekyll SEO tag v2.8.0 -->
|
||||
<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>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<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=1767196818" />
|
||||
<!--[if !IE]> -->
|
||||
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
|
||||
<!-- <![endif]-->
|
||||
<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>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
<script>
|
||||
var lastUpdated = new Date("Thu, 01 Jan 2026 00:00:18 +0800");
|
||||
var BlogAPI = "https://summary.mayx.eu.org";
|
||||
</script>
|
||||
<script src="/assets/js/main.js"></script>
|
||||
<!--[if !IE]> -->
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<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>
|
||||
<!-- <![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript,这不影响你的浏览,但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
|
||||
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer,这不影响你的浏览,但可能会有一些功能无法使用……</small></marquee><![endif]-->
|
||||
<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是一种什么样的感受?<!--more--></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>
|
||||
|
||||
<!--[if !IE]> -->
|
||||
<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', // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false, // Facebook-like distraction free mode
|
||||
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
|
||||
})
|
||||
gitalk.render('gitalk-container')
|
||||
</script>
|
||||
<!-- <![endif]-->
|
||||
|
||||
</section>
|
||||
<!--[if !IE]> -->
|
||||
<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>
|
||||
<!-- <![endif]-->
|
||||
<footer>
|
||||
<p>
|
||||
<small>Made with ❤ by Mayx<br />Last updated at 2026-01-01 00:00:18<br /> 总字数:614622 - 文章数:178 - <a href="/atom.xml" >Atom</a> - <a href="/README.html" >About</a></small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
<script src="/assets/js/scale.fix.js"></script>
|
||||
<!--[if !IE]> -->
|
||||
<script src="/assets/js/main_new.js"></script>
|
||||
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
|
||||
<script src="/Live2dHistoire/live2d/js/message.js"></script>
|
||||
<!-- <![endif]-->
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user