This commit is contained in:
2025-12-31 16:00:29 +00:00
commit 3688f93d5d
310 changed files with 93400 additions and 0 deletions

319
2025/02/09/server.html Normal file
View File

@@ -0,0 +1,319 @@
<!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>新旧服务器的使用体验与对比 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="新旧服务器的使用体验与对比" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="花更多钱可以收获更多吗?" />
<meta property="og:description" content="花更多钱可以收获更多吗?" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2025-02-09T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="新旧服务器的使用体验与对比" />
<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-02-09T00:00:00+08:00","datePublished":"2025-02-09T00:00:00+08:00","description":"花更多钱可以收获更多吗?","headline":"新旧服务器的使用体验与对比","mainEntityOfPage":{"@type":"WebPage","@id":"/2025/02/09/server.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2025/02/09/server.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2025/02/09/server.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.." />&#160;<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-02-09T00:00:00+08:00">9 February 2025</time> - 字数统计2811 - 阅读大约需要9分钟 - Hits: <span id="/2025/02/09/server.html" class="visitors">Loading...</span></small>
<h1 class="p-name">新旧服务器的使用体验与对比</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("Sun, 09 Feb 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">这篇文章主要探讨了作者购买新旧服务器的体验与对比。旧服务器如R730搭载20核40线程的英特尔E5-2698 v4性价比高性能能满足大部分应用需求且扩展性强但管理工具和安全方面与新服务器R760xs或R770搭载英特尔至强Gold 6426Y相比差一些。新服务器虽然具有修完漏洞、安全性好和AMX指令集等特征但在性能测试sysbench跑分新服务器与旧服务器相比性能提升并不明显尤其在大模型推理上AMX加速效果不明显。最后作者认为旧服务器对于大多数业务已经足够而新服务器的价值更多在于支持服务等附加服务而非硬件性能本身。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#选择服务器">选择服务器</a></li><li><a href="#使用体验与对比">使用体验与对比</a></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>花更多钱可以收获更多吗?<!--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>最近由于某些原因需要买点服务器,从我平时用的东西来看,其实很多年前的产品就已经满足大多数应用了,业务的发展跟不上时代的发展,就根本不需要更好的性能。所以既然要买服务器,还是买洋垃圾比较好,那些淘汰下来的服务器特别便宜。虽然这么说,但是我也好奇现在的技术到底发展到一个什么样的程度,所以也整个新的服务器玩玩吧。</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>那选哪个服务器比较合适呢我在大学里用过R730那款服务器给我留下的印象很不错拆装很方便也有很好用的带外管理功能iDRAC现在的R730已经非常便宜了我看了看CPU觉得既然洋垃圾很便宜那就要选个厉害的CPU最终我选择了双路20核40线程的<a href="https://www.intel.cn/content/www/cn/zh/products/sku/91753/intel-xeon-processor-e52698-v4-50m-cache-2-20-ghz/specifications.html">英特尔® 至强® 处理器 E5-2698 v4</a>总共40核80线程另外配了4根32GiB 2400MT/s的DDR4内存看起来参数还是挺唬人的🤣而且价格才2k多CNY感觉还挺不错。 </p><p>
那新的用啥呢我上Intel的官网看了看至强6是现在最新的Intel服务器CPU至于AMD的……主要是给我买服务器的人不喜欢AMD🤣所以只能选Intel的。既然旧的选了Dell新的也选Dell吧我看搭载至强6的戴尔服务器是R770但是目前还买不到😅而且价格贵的吓人。次一级就是R760可以上第四或第五代至强可扩展处理器不过看了一眼价格也有点贵……但这个机器有个青春版叫R760xs也能上第四或第五代至强可扩展处理器扩展性稍微差一点但是价格比较便宜他们管这叫“成本优化版”。最终选来选去选了个单路16核32线程的<a href="https://www.intel.cn/content/www/cn/zh/products/sku/232377/intel-xeon-gold-6426y-processor-37-5m-cache-2-50-ghz/specifications.html">英特尔® 至强® Gold 6426Y 处理器</a>外加4条16GiB 4800MT/s的DDR5内存总共花了将近4wCNY感觉还是相当贵啊……</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>服务器拿到手之后自然要先跑个分我给新服务器安装了Ubuntu Server 24.04旧的因为核心数多感觉应该能干点别的所以安装了Vmware ESXi 6.7然后在上面安装了个Ubuntu Server 24.04的虚拟机。跑分用的是sysbench。最终新的服务器单核跑分2853.45events/s多核47054.35events/s旧服务器单核876.22events/s多核52792.15events/s。从这里来看这个新服务器让人非常失望啊单核才3倍多点差距尤其我试了试13代i5的单核跑分能到4290.80events/s家用的处理器可是要便宜的多啊。多核虽然说16核比40核少了点能跑出差不多的分数已经很厉害了但是考虑到这两个服务器20倍的价格差还是深深的感到不值啊…… </p><p>
当然服务器的性能并不是它的优势扩展性才是但是R730的定位比R760xs的定位要高啊😂扩展性显然是旧服务器更强……那新服务器就没什么优势了吗倒也不是新服务器的处理器至少把漏洞都修完了除了幽灵漏洞之外至少不受其他漏洞影响安全性更强了。旧处理器和酷睿5代是同一个时代的所以会受各种CPU漏洞的影响。不过这个服务器又不会当云服务器租给别人用有没有漏洞根本无所谓啊😅。 </p><p>
那管理性呢新的带外管理用的是iDRAC9旧的是iDRAC8两个界面上差距倒是挺大的不过功能基本上都差不多从功能上来看9比8多了个修改BIOS的功能但是修改完还是得重启才能生效😅那不如花几十块钱买个企业版订阅然后用虚拟KVM直接重启进BIOS修改呢……不过如果是大规模的话可能是可以统一修改BIOS选项那就有点意义了不过对我来说没啥意义😥。 </p><p>
那还有别的优势吗我看网上说第四、第五代至强可扩展处理器新出了个指令集叫AMX可以用来加速AI推理正好最近国内一个叫DeepSeek-R1的模型挺火的那就拿来试试看呗要是这个AMX指令集能大幅提高CPU的推理速度那我还是挺认同它的价格的毕竟内存可以随便加显存……都被老黄垄断了价格巨贵无比😂。现在的<a href="https://github.com/ggerganov/llama.cpp">llama.cpp</a>已经支持了AMX加速具体的使用方法可以看Intel官网上的<a href="https://www.intel.cn/content/www/cn/zh/content-details/791610/optimizing-and-running-llama2-on-intel-cpu.html">论文</a>看起来需要安装Intel oneAPI的库才能编译使用。我折腾了一下编译完跑了一下DeepSeek-R1 32B Q4_K_M蒸馏版速度大概是5.2token/s。然后我安装了个<a href="https://ollama.com/">Ollama</a>它自带的这个llama服务器只支持AVX2指令集加速但是我试了一下速度能达到4.8token/s也就是说AMX指令集加速了个寂寞几乎没起倒什么作用难怪没什么人讨论。不过我也听说纯CPU跑大模型主要瓶颈在内存带宽上我插4条也就是四通道其实也不是它的全部实力它最大支持八通道也许给它插满效果会好一些吧…… </p><p>
那旧服务器呢我倒也试了一下用Ollama跑一样的模型大概是2token/s多的速度也就是说新的相比旧的也只快了1倍多一点而且旧的每个CPU只有2条内存只有双通道速度也只有新的一半结果新的才领先了一倍多一点都上了那么多黑科技……看来Intel是真不行了。 </p><p>
当然5.2token/s的速度显然是无法接受的还是有点慢了再加上DeepSeek-R1还有思维链在回答问题前还要生成一堆废话那就更慢了其实要我说它那个思维链其实就是把之前的AutoGPT的结果作为训练材料训练的相当于集成到模型里了我自己测了一下水平还是不够用包括官网的满血版也一样。我之前听说有一种叫做“投机采样”的推理加速技术不知道为什么凉了llama.cpp编译的产物里还有这个技术的PoC。于是我就下了个DeepSeek-R1 7B Q4_K_M蒸馏版拿来试试看用它来加速32B的怎么样。首先我单独测试7B的速度可以达到20token/s然后我用“llama-speculative”测了一下感觉有点一言难尽……一阵快一阵慢的总体来说感觉不如直接跑的快难怪这个技术凉了😥不过也可能是因为这两个模型的什么token分布不太一致毕竟是蒸馏的模型估计还是有点区别所以体验不太好吧。 </p><p>
那除了大语言模型之外还有什么可测的吗?其实就像我开始说的,要说能满足业务,洋垃圾显然是绰绰有余,尤其还是顶尖的洋垃圾,普通的业务甚至都不能让洋垃圾产生瓶颈,新的不就更不可能了😥……</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>从上面来看新服务器真的没什么优势啊性能提高了一些但是价格翻几十倍当然那些洋垃圾当年也是超级贵的东西只是被淘汰了所以失去了价值……不过说来这个价值也许并不是服务器硬件本身的价值“服务”也是很值钱的啊像那个支持服务比如远程诊断、上门服务现场响应之类的就是它贵的原因吧二手的旧服务器2019年就结束支持了新的有3年的支持期能到2027年不过我感觉在这支持期内恐怕没有能用到的地方啊服务器还是挺难坏的它最值钱的地方似乎只能被浪费掉了🥲。所以总的来说只有行业领先的业务才配得上最新的服务器小规模的业务还是用二手服务器吧😆。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=%E6%9C%8D%E5%8A%A1%E5%99%A8"><em>服务器</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=Dell"><em>Dell</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E4%BD%BF%E7%94%A8%E4%BD%93%E9%AA%8C"><em>使用体验</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2025-02-09-server.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/02/09/server.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/01/01/summary.html">
上一篇:年终总结
</a>
</span>
<br />
<span class="next">
<a href="/2025/02/22/llm.html">
下一篇近期LLM的部署与应用经历
</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/02/09/server', // 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/02/09/server.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</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>

327
2025/02/22/llm.html Normal file
View File

@@ -0,0 +1,327 @@
<!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>近期LLM的部署与应用经历 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="近期LLM的部署与应用经历" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="玩AI开始变的有些烧钱了啊……" />
<meta property="og:description" content="玩AI开始变的有些烧钱了啊……" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2025-02-22T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="近期LLM的部署与应用经历" />
<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-02-22T00:00:00+08:00","datePublished":"2025-02-22T00:00:00+08:00","description":"玩AI开始变的有些烧钱了啊……","headline":"近期LLM的部署与应用经历","mainEntityOfPage":{"@type":"WebPage","@id":"/2025/02/22/llm.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2025/02/22/llm.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2025/02/22/llm.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.." />&#160;<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-02-22T00:00:00+08:00">22 February 2025</time> - 字数统计3048 - 阅读大约需要9分钟 - Hits: <span id="/2025/02/22/llm.html" class="visitors">Loading...</span></small>
<h1 class="p-name">近期LLM的部署与应用经历</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("Sat, 22 Feb 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">这篇文章主要讲述了作者近期在探索和应用大型语言模型LLMDeepSeek的过程中遇到的挑战和体验。首先虽然DeepSeek在国内流行但作者发现其国内服务不稳定且自行搭建使用时虽然百度版本在可用性和速度上优于其他公司但作者受限于自身需求无法接入其他公司的接口。作者为了满足需要升级了硬件特别是购买了RTX4090显卡进行模型部署但发现蒸馏模型效果不佳。其次作者提到清华大学团队的KTransformers框架可能提供更好的性能但需要相应的硬件支持。作者还提到考虑使用Mac Studio M4 Ultra因其性价比更高。在应用方面作者计划建立知识库并使用MaxKB工具但发现其有数量限制且部分开源代码有限制作者通过修改代码解决了这个问题。最后作者认为虽然DeepSeek的普及带来了一些竞争压力但对于个人而言这是一个购买并尝试高端硬件的有趣经历。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#部署经历">部署经历</a></li><li><a href="#应用经历">应用经历</a></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>玩AI开始变的有些烧钱了啊……<!--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>在几年前我就已经<a href="/2023/04/05/ai.html">探索并玩过很多LLM了</a>不过近些日子在这方面的发展似乎影响到了我的生活……由于近期某公司开发的DeepSeek在国内非常火导致我也不得不跟上这个热潮去考虑怎么应用它。当然对于普通人来说使用它并没有什么难度即使DeepSeek的官方网站和APP现在基本不能用现在各家大公司也都自行搭建了目前我感觉使用DeepSeek体验最好的是百度其他家使用无论是可用性还是速度都比不过百度而且目前百度也没有限制使用量之类还是挺不错的。 </p><p>
但是对我来说却不能直接使用其他公司的产品,其实要从成本来说接入其他公司的接口显然是要便宜的多,但是我需要应用的地方可能连不上那些接口😅,所以需要考虑自己搭建。</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>为了能自己搭建DeepSeek首先就得买硬件了……虽然前段时间<a href="/2025/02/09/server.html">整了台新服务器</a>但是让CPU来跑还是太吃力了速度太慢了……所以为了能轻松的跑起来最近整了张RTX4090 48GiB显存魔改版但是手头没有空闲的机器了只能插在一台用着<a href="https://www.intel.cn/content/www/cn/zh/products/sku/126687/intel-core-i58400-processor-9m-cache-up-to-4-00-ghz/specifications.html">i5-8400</a>处理器的主机这下成狗骑吕布了🤣。有了这张显卡跑DeepSeek-R1的蒸馏模型从1.5B到70B的Q4_K_M量化版倒是轻轻松松用Ollama跑70B的模型也能到20Tps的速度。但是根据测试来看这些蒸馏模型的效果很差基本上没法用这些模型经常会发生不遵守指令内容随机掺杂英文而且也经常发生逻辑错误和671B的完整版完全不能比用起来还不如Qwen2.5各规模的模型。 </p><p>
那怎么办呢?前几天清华大学的某个团队更新了一款叫做<a href="https://github.com/kvcache-ai/ktransformers">KTransformers</a>的框架据说它可以利用Intel的AMX指令集然后配一张RTX4090可以让DeepSeek-R1 671B Q4_K_M量化版跑到13Tps能跑到这个速度那至少是可用级别了调其他公司的接口基本上也就是这个速度之前买的新服务器不就有这个指令集嘛之前还感觉这个指令集有点鸡肋呢看来还是开发度不够啊😆如果再配一个CPU然后把内存插满也许就可以了可惜R760xs插不了全高的显卡要想插全高的估计就只能买R760了或者用PCI-E延长线不过那样感觉不太可靠……不过之后肯定还是会想办法上完整版的模型毕竟它的效果确实是不错最关键的是它的市场认可度高上了就能提高产品竞争力所以之后应该会想办法搞到满足KTransformers的硬件然后跑起来或者等<a href="https://github.com/ggml-org/llama.cpp">llama.cpp</a>合并它的算法然后用llama.cpp会更好一些。 </p><p>
不过我更倾向于等Mac Studio M4 Ultra出来应该过几个月就能出按照目前发展趋势来看新款Mac Studio应该会有更大的内存理论上可以跑的动一些效果更好的<a href="https://unsloth.ai/blog/deepseekr1-dynamic">动态量化版</a>现在能在M2 Ultra上跑的那个1.58位的效果还是不太行相比于价格十几万的服务器Mac Studio估计不到十万可以说是非常有性价比了。当然如果等不及的话应该还是会选择花十几万买个有双路第四代至强可扩展处理器加512GiB内存的服务器吧……</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>有了模型之后如果只是聊天那就没必要费这么大劲了,费劲搭当然是为了能让它参与到实际的工作当中。不过该如何应用它呢?首先要让它知道工作的内容,所以第一步要搞出知识库。知识库的原理倒是很简单,我之前就给我博客的<a href="/2024/09/27/rag.html">聊天机器人加了RAG功能</a>核心就是嵌入模型和向量数据库。不过我写的那个全都是为了能使用Cloudflare的功能脱离了Cloudflare就没用了。那如果要在本地搞应该怎么办呢我之前用过的<a href="/2024/02/03/1panel.html">1Panel</a>开发它的公司旗下有个叫<a href="https://github.com/1Panel-dev/MaxKB">MaxKB</a>的产品看起来很不错它使用了PGSQL和<a href="https://github.com/pgvector/pgvector">pgvector</a>作为向量数据库来搭建知识库而且它是用Python写的还能用Python来写自定义功能的函数库另外它还能用可视化的方式来设计工作流可以轻松构建需要的逻辑从功能上来说我还是挺满意的。 </p><p>
使用也挺简单在设置里可以添加使用其他公司API的模型也可以使用Ollama不过这一步有个坑Ollama并不支持设置API Key但是它添加模型却要求配置一个API Key文档说可以输入任意内容我输了一个空格可以保存但是使用的时候会报网络错误所以它文档里怎么不说明一下是除了空格之外的任意内容😅浪费了我不少时间。 </p><p>
在添加知识库的时候可以除了<a href="https://github.com/shibing624/text2vec">内置的嵌入模型</a>好像是腾讯的员工搞的模型也可以用Ollama的嵌入模型。它自带的嵌入模型用的是CPU文档规模大的情况速度比较慢因为在Cloudflare上我用的是BAAI的BGE模型效果还可以所以这次我还是选了它但是选的是中文模型这样就不需要再翻译了🤣。 </p><p>
开始我对MaxKB印象还是挺不错的但是用着用着……在建第六个应用的时候它显示社区版只能创建五个应用😅对于开源软件这样做限制我也是大开眼界了要是说有些专业版功能不开源是DLC的形式付钱来获取更多的功能代码我还能理解在开源代码上做数量上的限制这垃圾公司多少有点看不起人了😅。 </p><p>
那对于这种挑衅行为该怎么反制呢?它的代码倒是没有混淆之类的,还算不错,比我以前用过的<a href="https://github.com/kalcaddle/KodExplorer">KodExplorer</a>要好,它还整个“部分开源”,有个<a href="https://github.com/kalcaddle/KodExplorer/blob/master/app/controller/utils.php">关键文件</a>直接是混淆过的想改都改不了😅至少MaxKB还能随便改。 </p><p>
我大概看了眼代码只需要改两个文件就行一个是“apps/common/util/common.py”把其中“valid_license”函数进行判断的部分全部注释另外一个文件是“apps/setting/serializers/valid_serializers.py”把“ValidSerializer”方法中的“valid”方法里进行判断的部分全部注释就可以了开源还做限制我是真的无法理解…… </p><p>
如果是用1Panel部署的可以把那两个文件放到“/opt/1panel/apps/maxkb/maxkb”目录下然后在docker-compose.yml文件的volumes段添加</p>
<div class="language-yml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="pi">-</span> <span class="s">./common.py:/opt/maxkb/app/apps/common/util/common.py</span>
<span class="pi">-</span> <span class="s">./valid_serializers.py:/opt/maxkb/app/apps/setting/serializers/valid_serializers.py</span>
</code></pre></div></div>
<p>就可以了。 </p><p>
不过总体来说从功能上我还算比较满意,就原谅它搞出这种奇葩的行为吧😆。 </p><p>
MaxKB主要是为了能给更多人使用所以是网页版部署也略显麻烦如果是自己用呢我之前看到过一个桌面软件叫做<a href="https://github.com/CherryHQ/cherry-studio">Cherry Studio</a>。它更适合开箱即用一些功能上可能不如MaxKB强大但是比较方便一些。比如上传文档MaxKB需要在流程图中自行处理这个软件会帮你处理好添加知识库可以直接添加本地的文件夹不用上传到服务器上另外安装比较方便不像MaxKB搭环境比较麻烦些所以个人用的话可以用Cherry Studio。</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>总的来看DeepSeek的出现还算可以虽然它受到的关注和它的能力也许并不匹配但是毕竟现在的它已经是人人都能蹭的东西了谁都能挂它的名头我们来蹭一蹭也能分点它的好处。当然这样的结果倒也不差开发DeepSeek的公司只能获得他们应得的部分其他的关注度就应该被各家公司瓜分😆。我在这期间虽然很难获得什么实质性的收获但是能在这期间能搞点很贵的硬件之类的玩玩也是不错的体验啊🤣。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=LLM"><em>LLM</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=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD"><em>人工智能</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2025-02-22-llm.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/02/22/llm.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/02/09/server.html">
上一篇:新旧服务器的使用体验与对比
</a>
</span>
<br />
<span class="next">
<a href="/2025/03/08/llm2.html">
下一篇近期LLM的部署与应用经历(2)
</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/02/22/llm', // 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/02/22/llm.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</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>