Tag: 硬件

  • 构建自己的NAS家庭服务器:省钱、省心、省心事

    构建自己的NAS家庭服务器:省钱、省心、省心事

    在这个数字化时代,我们积累了大量的数据和服务需求。无论是照片、视频还是文档,数据的存储和访问对于每个人都至关重要。然而,云存储和订阅服务的费用逐渐攀升,使人们陷入了昂贵的存储解决方案和复杂的订阅费用之中。如果你正寻求一种方法来摆脱这一困境,那么自己构建一个便宜的DIY NAS家庭服务器可能是一个更好的选择。

    DIY NAS与购买现成产品的对比

    在决定是否走DIY NAS的路线之前,值得考虑一下你对设备的需求。QNAP或Synology等品牌的NAS产品提供了更为简单、不费时的选择。它们提供了预安装的操作系统和全面的软件套件,可以处理云文档、备份等各种任务。此外,它们支持Docker容器、硬件RAID,并且可以扩展到许多NVMe和SATA端口,满足高级用途。但请准备好支付高昂的价格以换取即插即用的便捷性。

    相比之下,DIY NAS涉及的步骤更多,不仅包括选择硬件,还包括设置软件。但优势也是显而易见的:DIY路线为你的预算提供更多的性能,具有更大的硬件和升级灵活性,而且你可以通过重新利用旧笔记本电脑、PC或树莓派来节省大量费用。我多年来一直在我的树莓派4上运行家庭服务器,直到最近才升级。

    选择适合建造廉价NAS的硬件

    要从零开始构建NAS有两种主要方法:一种是使用类似PC的专用外壳,另一种是使用带有直接附加存储(DAS)的迷你PC。前者是重新利用旧CPU的绝佳方式,可以提供大量的NVMe和SATA端口,以实现最佳性能和存储。然而,选择主板、内存、电源和机箱等部件相对复杂,如果没有零件在手,成本可能会迅速超过预制NAS的价格。

    如果你从零开始并且不需要特别复杂的配置,我建议选择迷你PC和DAS路线。它们价格便宜,设置简单,而且在需要额外处理能力或可扩展存储时仍然非常容易升级。唯一的缺点是与较大的主板相比,NVMe/SATA硬盘连接数有限。要获得外部存储的良好性能,你需要一个USB 3.0(5Gbps)端口或更高版本,但即使这样,如果打算在同一DAS中在多个SSD之间传输大量数据,这也可能成为瓶颈。你可以通过使用10Gbps USB 3.1 Gen 2端口、电缆和DAS来解决这个问题,但这些更昂贵。但对于存储照片、音乐和文件来说,5Gbps的USB速度已经足够了,特别是与旋转硬盘一起使用时。

    选择适用于DIY NAS的CPU/迷你PC

    选择合适的CPU/迷你PC是关键决策。由于NAS始终处于开启状态,低待机功耗是一个很大的优点,但这需要与提供的最大性能进行权衡。基本的NAS用例,如文件共享,需要非常少的功率,但如果你想进行AI图像识别或HDR视频转码,需求会迅速增加。

    例如,1W的基于Arm架构的Raspberry Pi 3可以用于Plex媒体服务器,但只支持直接播放。而4W的树莓派4型号勉强可以运行低比特率的1080p x265软件转码。但要实现4K转码,通常需要Intel Core i5或i7处理器,伴随着大约60W的系统空闲功耗。幸运的是,现代移动芯片上的Intel Quick Sync或类似的硬件转码效果相当不错,可以大幅降低功耗。我编制了一个大致的硬件指南,以满足特定用例的需求,但不可能涵盖每一种硬件。

    芯片组 TDP范围 用例
    极低功耗 Raspberry Pi 3 1-3W 文件共享和备份、媒体服务器(仅直接播放)、基本的Minecraft服务器
    低功耗 Raspberry Pi 4B、Intel J、AMD Ryzen嵌入式(无GPU) 5-20W 文件共享和备份、媒体服务器、低用户数1080p视频转码、基本的图片机器学习、低玩家数量的Minecraft服务器、家庭助手
    平衡功耗 Intel N、AMD Ryzen嵌入式(带GPU) 10-30W 文件共享和备份、媒体服务器、多用户4K视频转码、图片机

    器学习、Minecraft服务器、家庭助手
    高级 | Intel Core i3、i5、i7、AMD Ryzen 3、5、7 | 45-200W | 文件共享和备份、媒体服务器、高质量多用户视频转码、图片机器学习、Minecraft服务器、家庭助手

    在我的最新构建中,我选择了一台新的搭载Intel N100处理器的Trigkey G5迷你PC(来自亚马逊,售价200美元),配备了过剩的16GB LPDDR5内存、双2.5Gbps LAN以及一块性价比较高的500GB NMVe操作系统固态硬盘。这款迷你PC在空闲状态下的功耗仅略低于6W(几乎与树莓派4相当),但却配备了四个3.4GHz的Alder Lake E核心和硬件转码功能。在峰值时可以达到30W的功耗,足以处理广泛的应用程序和我测试过的四个4K HDR HVEC到1080p的转码流。这远远超过了中端NAS市场上充斥着的Intel Celeron J和AMD Ryzen V1000芯片所提供的性能。

    5W和60W待机功耗之间的差距可能会带来每年100美元的差异。

    搭配一台4盘位的Terramaster DAS(来自亚马逊,售价170美元),可以获得高达80TB的存储容量,这个配置比高端的Synology DS923+(售价600美元)还要强大,成本不到其三分之二。尽管没有硬件RAID支持(我不需要),但你可以为你的DAS添加这个功能,成本相对较低。

    这只是高端DIY选项的一个例子。你可以选择一台搭载Intel N5095、8GB内存的迷你PC(来自亚马逊,售价149美元)和一个双盘位外壳(来自亚马逊,售价80美元),价格大致与入门级的Synology DS223相当。但同样,这款芯片的性能显著更强,足以处理数个4K转码流,并从庞大的库中创建图片缩略图。廉价DIY NAS配置的另一个好处是,迷你PC可以自带一个2.5英寸硬盘或两个,如果这正是你所需要的,你可以廉价地将一个2.5英寸硬盘连接到USB硬盘上,或者选择适合你的存储需求并根据需要进行升级的多种两盘、四盘甚至更多盘位的DAS选项。

    安装DIY NAS软件的技巧

    到目前为止,一切都很容易,但安装软件是为了省钱而进行的努力所需要付出的时间。虽然我不能在这里涵盖所有可能的配置选项,但我可以提供一些初学者友好的简短提示,帮助你入门。

    为你的NAS选择操作系统

    尽管坚持使用熟悉的操作系统如Windows可能很诱人,但NAS更适合没有显示器的操作系统,比如众多的Linux发行版之一。此外,我们还可以享受到Docker的好处。然而,对于未经培训的人来说,安装和使用Linux命令行可能会感到困难。幸运的是,OpenMediaVault提供了可启动的ISO媒体,使安装过程非常简单,所以我不需要在这里重复步骤。只需将一个USB驱动器刻录成可启动盘,在你的PC上引导它,然后按照步骤在全新硬盘上安装OMV即可。TrueNAS Scale也是一个不错的选择,因为它提供了可启动的ISO媒体,但本文重点介绍了OMV。

    但值得注意的是,我的最新设置无法检测到我的迷你PC的LAN硬件,在使用新硬件时可能会出现问题。因此,我安装了最新版本的Debian(包括最新的Linux内核),并确保在安装过程中启用了SSH,以便我可以在启动时访问命令行。如果需要命令行访问,你需要找到你的NAS本地IP地址,并使用像Putty这样的服务进行隧道连接。

    然后,我使用了这个非常有帮助的脚本来在其上安装OMV——这与在树莓派上安装OMV的过程相同。一旦安装完成,你需要从路由器的设置中找到NAS/PC的本地IP地址(例如192.168.1.10),然后通过Web浏览器登录到OMV。就是这样,你将不再需要触及命令行。

    添加应用程序和服务

    OMV默认提供了管理硬盘驱动器、设置网络文件共享、同步备份和监视系统所需的一切。但我们还需要安装一些应用程序来更充分地利用我们的设置。这就是Docker派上用场的地方。首先,你需要在System > omv_extras > Docker-repo下启用Docker,然后在System > Plugins中安装Compose插件(如果尚未安装omv_extras,你也可以在这里找到它)。

    现在,你应该能够看到Service > Compose菜单。进入Files开始添加应用程序。OMV提供了

    一些示例,你可以添加它们,其中包括Deluge、Plex、Pihole、Syncthing等流行的应用程序。但在保存和启动服务之前,我们需要了解一些关于docker-compose文件的基础知识,特别是volumes参数。

    Docker可能令人生畏,但一旦你掌握了它,就能够访问广阔的自托管软件世界。选择太多,因此我列出了一个非穷尽的列表,以便你入门。

    媒体服务器

    • Jellyfin — 开源媒体服务器,支持良好的客户端。
    • Plex — 闭源媒体服务器,支持广泛的客户端。
    • Navidrome — 开源音乐服务器。

    图片查看器

    • Photoprism — 具有机器学习功能的照片库。
    • Lychee — 开源画廊管理工具。
    • Immich — 早期开发的Google照片替代方案。

    办公/文件

    • Nextcloud — 开源的自托管云存储。
    • Owncloud — 半开源的自托管云存储。

    有用的工具

    • Home Assistant — 在一个地方管理你的智能家居设备。
    • Nginx反向代理管理器 — 通过你自己的子域名将服务暴露在网上。
    • Pihole — 通过将流量路由通过你的服务器来阻止广告。

    从简单的备份到自托管的替代品,以替代昂贵的云服务,构建一个廉价的DIY NAS可以割断与日俱增的昂贵云服务的联系。现成的NAS硬件是入门的好方法,尤其是如果你时间有限。但希望这篇指南能够说服你,自己构建PC或Mini-PC/DAS设置是掌控自己设置的好方法。而且成本要低得多,硬件要多得多,比Synology或QNAP多得多。

    如果你对自己的DIY NAS有更多的需求和野心,那么自己动手搭建一个NAS可能是个不错的选择。不仅可以根据自己的需求定制硬件,还可以掌控整个系统,提供更多的性能和灵活性。当然,这需要更多的时间和精力,但最终的结果可能会更加令人满意。

    最后,不要忘记备份你的数据,因为DIY NAS虽然强大,但也有风险。无论你选择哪种方式,都要确保你的数据安全,这样你就可以享受到自己构建的NAS带来的自由和性能优势。

  • 如何快速检索上亿数据

    如何快速检索上亿数据

    在现代信息时代,我们每天都生成和处理着海量的数据。无论是互联网公司、金融机构还是科学研究,都需要处理大规模的数据集。在这个背景下,如何快速、高效地检索上亿条数据成了一个重要的问题。假设你正在开发一个应用程序,需要根据一个或两个字段进行模糊查询,那么应该选择什么样的中间件或搜索方法呢?本文将为你提供一些解决方案和建议。

    1. Elasticsearch

    Elasticsearch是一个强大的全文搜索引擎,广泛用于处理大规模数据集的检索和分析。它具有出色的性能和可伸缩性,特别适用于全文搜索和模糊查询。Elasticsearch可以轻松地处理上亿条数据,并提供高效的检索功能。它还支持分布式部署,可以根据需求扩展集群规模,确保性能和可用性。

    2. ClickHouse

    ClickHouse是一个用于分析和查询大数据集的列式数据库管理系统。它在处理大规模数据时表现出色,特别适用于快速的聚合和分析操作。如果你的搜索结果通常是返回少量数据,ClickHouse可以在毫秒级别内提供响应,确保出色的用户体验。

    3. MeiliSearch

    MeiliSearch是一个开源的全文搜索引擎,专注于提供简单而快速的搜索解决方案。它可以轻松应对上亿条数据的模糊查询,并具有高度可配置性。MeiliSearch支持多种编程语言,因此可以与PHP、Java等常见的编程语言轻松集成。

    4. Manticore Search

    Manticore Search是一个开源的全文搜索引擎,具有强大的文本检索和分析功能。它支持多种查询类型,包括全文搜索、模糊查询和范围查询。Manticore Search可以处理大规模数据集,并提供出色的性能。

    5. N-gram索引

    如果你使用Elasticsearch或其他搜索引擎的模糊查询功能,但性能不如预期,可以考虑使用N-gram索引。N-gram索引将文本分成连续的N个字符,并将它们存储在索引中。这种方法可以提高模糊查询的性能,尤其是在处理大规模数据时。

    6. 硬件优化

    无论你选择哪种搜索方法,硬件优化都是至关重要的。确保你的服务器具有足够的内存、处理器和存储容量,以应对大规模数据的检索需求。此外,使用SSD硬盘可以提高数据访问速度,进一步提升性能。

    总结

    在处理上亿条数据的模糊查询时,选择合适的搜索方法和中间件至关重要。Elasticsearch、ClickHouse、MeiliSearch和Manticore Search都是强大的工具,可以根据你的具体需求选择合适的解决方案。此外,使用N-gram索引和硬件优化可以进一步提高性能,确保你的应用程序能够高效地处理大规模数据。

  • 芯片制程的未来:1纳米时代的挑战与前景

    芯片制程的未来:1纳米时代的挑战与前景

    近日,一则关于芯片制程的讨论引发了广泛关注。人们对于芯片制程能否继续迭代下去产生了疑虑,特别是在看了极客湾最新一期关于A17 Pro性能分析的节目后。这引发了我们对未来芯片制程的思考,特别是在1纳米制程时代是否存在挑战和前景。

    制程的数字与实际

    首先,让我们澄清一下关于芯片制程数字的误解。现在的芯片制程命名中存在着一定的营销成分。比如,3纳米制程之所以被称为3纳米,其实并不代表芯片中的元件都是3纳米大小的。这个数字更多地反映了与上一代制程的比例关系。例如,如果上一代是5纳米,那么3纳米制程就是5纳米的0.7倍,即3.5纳米。

    因此,制程的数字并不直接对应实际的元件大小。不同厂家对于制程的描述也有差异,所以要理解制程的实际情况,需要更多的技术细节。

    制程的未来:3D堆叠与材料突破

    芯片制程的发展还有一些新的方向。其中之一是3D堆叠技术,通过将不同层次的芯片元件堆叠在一起,可以增加芯片的性能和密度。这种技术在未来可能会成为芯片制程的重要发展方向。

    此外,材料科学的突破也可以推动制程的进步。新材料的引入和优化可以改善芯片的性能和能效。因此,虽然制程的数字可能会到达极限,但材料科学的不断发展可以为芯片制程带来新的活力。

    对媒体评测的思考

    在讨论芯片制程的进展时,还需要考虑媒体评测的角度。过去,CPU或GPU的新一代架构通常会受到媒体评测的关注,分析人员可以直接获得厂商的架构文档来进行分析。

    然而,在手机SoC评测中,情况可能会不同。有时候,评测人员需要通过逆向工程来分析手机SoC的架构,这可能导致评测的准确度存在一定程度的存疑。因此,在阅读关于手机SoC性能的评测时,需要谨慎对待结论,不要轻信一家之言。

    量子效应与未来挑战

    随着芯片制程不断缩小,量子效应变得愈发显著。当元件尺寸缩小到一定程度时,量子效应会对性能产生重大影响。这也是为什么在1纳米制程时代可能会面临更大挑战的原因之一。

    此外,芯片制程的极限密度也是一个挑战。目前,制程的密度已经接近400M/mm^2,但要进一步提高密度可能会变得越来越困难。

    未来的发展方向

    未来,芯片制程的发展方向可能不仅仅关注制程本身,还会涉及到AI、NPU等领域的算力提升。通过芯片堆叠技术、特定算力加速器以及IO速度的提升,我们可以期待未来的芯片在性能和能效方面有更大的突破。

    总之,尽管芯片制程的数字可能会达到极限,但仍然存在许多未来的发展方向。材料科学、3D堆叠技术以及新的算力加速器都将推动芯片制程的进步。我们期待看到未来芯片领域的创新和突破。

  • 声音魔法:VITS音频转换框架揭秘

    声音魔法:VITS音频转换框架揭秘

    在一个安静的夜晚,我坐在电脑前,思考着如何将我的声音转化成我的最爱的音乐人的声音。这似乎是一个不可能的任务,但却充满了神秘感。突然,我发现了一个名为Retrieval-based-Voice-Conversion-WebUI的项目,它基于VITS(Voice Inference from Text and Speech)框架,提供了一个轻松易用的声音转换工具。于是,我踏上了声音魔法之旅,今天我将与大家分享这一奇妙的经历。

    声音转换的魅力

    在开始揭秘Retrieval-based-Voice-Conversion-WebUI之前,让我们先来聊聊声音转换的魅力。声音是一种神奇的媒介,可以传达情感、表达个性,甚至改变现实。你是否曾经梦想过能够像你喜爱的歌手一样唱歌?或者是在特定场合中,用某位名人的声音发表演讲?声音转换技术为这些梦想提供了可能性。

    但是,要将声音从一种变成另一种,这绝非易事。声音转换涉及复杂的信号处理、深度学习模型和大量的数据。幸运的是,现在有了一些强大的工具和框架,它们使声音转换变得更加容易和有趣。

    Retrieva-based-Voice-Conversion-WebUI简介

    Retrieval-based-Voice-Conversion-WebUI是一个基于VITS框架的声音转换工具,它可以将一种声音转换为另一种声音,同时保留语音的自然感觉。这个项目的目标是让声音转换变得容易,并且可以在普通电脑上进行,无需高端硬件。

    以下是这个项目的一些关键特点:

    • 通过使用top1检索将源特征替换为训练集特征,减少音调泄漏。
    • 即使在相对较差的显卡上,也可以进行轻松快速的训练。
    • 即使使用少量数据进行训练,也可以获得相对好的结果(建议使用不少于10分钟的低噪音语音)。
    • 支持模型融合以改变音色。
    • 提供易于使用的WebUI界面。
    • 使用UVR5模型快速分离声音和乐器。
    • 使用最强大的高音提取算法InterSpeech2023-RMVPE来防止消音问题,提供了显著更好的结果,速度更快,资源消耗更低。

    现在,让我们一起来探索如何使用Retrieval-based-Voice-Conversion-WebUI进行声音转换。

    准备环境

    首先,确保你的Python版本是3.8或更高。然后,执行以下命令以安装主要依赖项:

    # 安装PyTorch相关核心依赖项,如果已安装,请跳过
    pip install torch torchvision torchaudio

    接下来,可以使用Poetry来安装其他依赖项:

    # 安装Poetry依赖管理工具,如果已安装,请跳过
    curl -sSL https://install.python-poetry.org | python3 -
    
    # 安装项目依赖项
    poetry install

    或者,你也可以使用pip来安装它们:

    # 对于Nvidia显卡
    pip install -r requirements.txt
    
    # 对于Windows上的AMD/Intel显卡(DirectML):
    pip install -r requirements-dml.txt
    
    # 对于Linux / WSL上的Intel ARC显卡,使用Python 3.10:
    pip install -r requirements-ipex.txt
    
    # 对于Linux上的AMD显卡(ROCm):
    pip install -r requirements-amd.txt

    接下来,你需要下载其他预模型文件,可以在项目的Huggingface空间中找到它们。这些文件包括了用于推断和训练的预模型文件。确保将它们放在正确的目录下。

    开始声音转换

    一旦你的环境准备好了,你可以使用以下命令启动WebUI:

    python infer-web.py

    如果你使用的是Windows或macOS,你可以直接下载并解压RVC-beta.7z文件,然后使用go-web.bat(Windows)或sh ./run.sh(macOS)来启动WebUI。

    结束语

    声音转换是一门神奇的艺术,它使我们能够在声音的世界中自由穿越。Retrieval-based-Voice-Conversion-WebUI为我们提供了一个便捷的工具,让我们能够将声音转换成我们想要的样子。无论是在娱乐还是工作中,这个项目都有着巨大的潜力。探索声音的可能性,释放声音的魔法吧!

  • 升级到Stable Diffusion 1.6版本:AI创作者的最佳选择

    升级到Stable Diffusion 1.6版本:AI创作者的最佳选择

    很多人说,计算机编程是一门孤独的艺术,就像是一位吉他手在弹奏一曲美妙的音乐,我也深有体会。每当我坐在电脑前,编写代码的时候,就仿佛是在演奏一场独奏音乐会。而这场音乐会的背后,有一个不为人知的“指挥家”——Stable Diffusion(稳定扩散),一个强大的AI模型。今天,我将向大家介绍Stable Diffusion 1.6版本的升级内容,为你呈现一场前所未有的“音乐盛宴”。

    为什么要升级到Stable Diffusion 1.6版本?

    在编程的世界里,每个版本的升级都意味着更多的功能和更好的性能。而Stable Diffusion 1.6版本,可以说是一次革命性的升级。不仅仅是因为它的强大,更因为它的简便和高效。

    新功能一览

    1. 增加了refiner(图像细节提升)

    在以往的版本中,我们使用refiner插件来提升图像的细节,但现在,这个功能已经成为系统的一部分。你只需在文生成图或图生成图时启用,选择第二个模型,程序将在基于主模型生成图之后,基于第二个模型进一步提升图像细节。这意味着更高效的图像处理,无需切换模型,大大提高了工作效率。

    2. 增加了Style editor对话框(风格编辑更便捷)

    以前,我们需要手动输入一堆预设词来定义图像风格,而现在,Stable Diffusion 1.6版本带来了全新的风格编辑器。你可以预先定义正向词和反向词,并为其取个合适的名称,保存之后备用。这样,你只需选择预设词,它们将自动融入图像生成过程中的正向和反向提示词中。这个改动使得编辑风格更加便捷,让你专注于表达你想要的内容。

    3. 模型选项卡嵌入式tab(更好的分类管理)

    模型选项卡现在已经变成了嵌入式tab,不再需要在巨长页面中上下翻动。如果你喜欢分类管理模型,只需勾选右边的“show dirs”,你的分类将重新出现,等待你回来。这一改变让模型管理更加清晰和高效。

    4. LoRA管理功能升级(更方便的触发词和权重设置)

    LoRA(语言风格模型)的管理变得更加直观和便捷。你可以轻松设置触发词和最佳权重,甚至可以看到LoRA的属性一览,包括底模、分辨率、训练时间等。这个功能为多样的语言风格模型提供了更多的自定义和控制。

    5. Mac用户的福音(GPU生成与CPU相同的图片)

    对于Mac用户来说,Stable Diffusion 1.6版本也带来了好消息。现在,你可以选择使用CPU在不同的视频卡供应商之间生成与NVidia视频卡相同的图片。虽然在生成速度上可能有所差距,但这一功能让Mac用户也能享受GPU级别的图像生成体验。

    6. 其他更新的内容

    此外,Stable Diffusion 1.6版本还新增了几个新的采样器,包括Restart、DPM++ 2M SDE Exponential、DPM++ 2M SDE Heun等,以及UI更新,使界面更加美观。同时,图生成图对内存和显存的占用也更小,为你的电脑提供更好的性能体验。还有,多人使用时的排队进度展示,让团队协作更加顺畅。

    如何升级到Stable Diffusion 1.6版本?

    如果你还没有尝试过Stable Diffusion 1.6版本,我强烈建议你赶紧跟上进度。如果你使用整合包,可以直接在版本管理中进行更新。如果是自己安装的版本,可以通过启动器脚本中的git pull命令进行更新,或者访问GitHub下载最新版。

    结语

    Stable Diffusion 1.6版本的升级带来了许多令人激动的功能和改进,让AI创作者们的工作更加高效和便捷。如果你想提升你的创作体验,不妨升级到这个版本,体验一场前所未有的“音乐盛宴”。

  • 探索SmartKnob:开源虚拟刻度旋钮的未来

    探索SmartKnob:开源虚拟刻度旋钮的未来

    想象一下,你坐在办公桌前,试图调整电脑屏幕的亮度。你手中握着一个旋钮,不同寻常的是,它不只是冷冰冰的金属,而是有着柔软质感的材料。当你旋转它时,感觉到一种微妙的阻力,仿佛是在探索一个真实的世界。屏幕的亮度随着旋钮的转动而逐渐改变,仿佛与你亲手操作有关。这不再是普通的旋钮,这是SmartKnob,数字时代的旋钮。

    SmartKnob是什么?

    SmartKnob是一款开源的输入设备,它与众不同之处在于,它具备软件可配置的终点和虚拟刻度。SmartKnob采用了磁性编码器和无刷云台电机,实现了闭环扭矩反馈控制。这意味着用户可以感受到真实的点击和弹性,使得调整变得更加精确和令人愉悦。

    这个项目的灵感源自Jesse Schoch的视频”haptic textures and virtual detents“,以及在SimpleFOC社区中的相关讨论。SmartKnob的目标是将这种虚拟刻度的触感带入我们的数字生活中,使用户能够更加自由和精确地进行各种调整。

    项目背后的创作者

    这个激动人心的项目的创造者是Scott Bezek,他是一位热衷于开源硬件和软件的电子爱好者。他将自己的技术和创意投入到SmartKnob中,旨在为用户提供一种全新的、令人愉悦的控制体验。

    SmartKnob的特点

    SmartKnob拥有一系列引人注目的特点,使其成为一个备受期待的项目。

    闭环扭矩反馈

    SmartKnob采用磁性编码器和无刷云台电机,实现了闭环扭矩反馈控制。这一技术使用户可以感受到真实的点击和弹性,使调整更加精确和令人愉悦。无论你是在调整音响音量还是控制车辆的空调温度,SmartKnob都能提供与实体旋钮一样的触感。

    软件可配置

    SmartKnob的终点和虚拟刻度是软件可配置的。这意味着用户可以根据自己的需求动态地调整旋钮的触感,使其适应不同的应用场景。无论是需要快速调整还是进行精确的微调,SmartKnob都能满足你的需求。这种灵活性是传统旋钮无法比拟的。

    开源项目

    SmartKnob是一个开源项目,这意味着任何人都可以查看和修改其设计和代码。这鼓励了创新和社区参与,使项目不断发展和改进。如果你有自己的创意或改进建议,你可以积极参与到SmartKnob的发展中,为用户提供更好的体验。

    SmartKnob View

    SmartKnob View:更直观的控制体验

    SmartKnob项目中的一个令人兴奋的亮点是SmartKnob View,它提供了一种高级的SmartKnob体验。该版本具有一个集成的显示屏,使用户能够更直观地控制各种参数。它正在积极开发中,为用户提供了更多功能和便利性。

    令人振奋的特性

    SmartKnob View具有一系列令人振奋的特性,包括:

    • 240×240圆形LCD,由39.5mm的表玻璃保护。
    • 带有中空轴的BLDC云台电机,用于机械和电气连接LCD。
    • 由ESP32-PICO-V3-02(Lilygo TMicro32 Plus模块)供电。
    • PCB弯曲和SMD电阻用作压力检测的应变计(通过电机提供刚性和动态的角度变化)。

    SmartKnob View的目标是为用户提供更直观的控制体验,让他们能够更轻松地进行各种调整和设置。无论是在音乐制作中需要精确的音量控制,还是在设计工

    程中需要精确的参数调整,SmartKnob View都能胜任。

    结语

    SmartKnob是一个令人兴奋的开源项目,它将虚拟刻度的触感引入了数字世界,为用户提供了更加自由和精确的控制体验。创作者Scott Bezek的激情和创意使这个项目成为可能,而SmartKnob View的推出将进一步提升用户的体验。

    如果你对SmartKnob项目感兴趣,可以在GitHub上查看其代码库。这个项目还在不断发展,你可以通过参与社区来贡献你的想法和技能。

    未来,我们可以期待更多类似的创新项目,将物理世界的触感带入数字领域,为用户提供更出色的交互体验。SmartKnob只是众多可能性中的一个,它为我们打开了一扇通向未来的大门。

  • 如何使用tiktoken计算文本中的标记数

    如何使用tiktoken计算文本中的标记数

    你是否曾经想知道一个文本字符串包含多少个标记?标记在GPT模型中是很重要的,因为它们决定了文本的长度和模型处理的成本。本教程将向你介绍如何使用OpenAI的开源工具tiktoken来轻松计算文本中的标记数。

    引子

    在开始之前,让我们来谈谈为什么需要计算标记数。标记是文本的最小单位,可以是一个字符,也可以是一个单词。GPT模型处理文本时以标记为基本单位,因此知道一个文本字符串包含多少标记对于以下两个方面非常重要:

    1. 文本长度限制:有时,你可能需要将文本输入到一个模型中,但模型对文本长度有限制。如果你的文本超过了模型的最大标记数限制,你需要截断或缩短它,以确保模型可以正确处理。

    2. 计算成本:使用OpenAI的API调用GPT模型是需要付费的,而费用是按照标记数计算的。因此,了解文本中有多少标记可以帮助你估算API调用的成本。

    使用不同的编码

    在使用tiktoken之前,你需要了解文本是如何被转换成标记的。不同的模型使用不同的编码方式。tiktoken支持三种OpenAI模型使用的编码:

    • cl100k_base:用于gpt-4、gpt-3.5-turbo、text-embedding-ada-002等模型。
    • p50k_base:用于Codex模型、text-davinci-002、text-davinci-003等模型。
    • r50k_base(或称为gpt2):用于GPT-3模型,如davinci。

    你可以使用以下方式获取特定模型的编码:

    import tiktoken
    
    # 获取gpt-3.5-turbo模型的编码
    encoding = tiktoken.encoding_for_model('gpt-3.5-turbo')

    请注意,p50k_base与r50k_base在非代码应用中有很大的重叠,在这种情况下,它们通常会产生相同的标记。

    使用tiktoken计算标记数

    现在,让我们看看如何使用tiktoken计算文本中的标记数。首先,你需要安装tiktoken库:

    pip install --upgrade tiktoken

    安装完成后,你可以按照以下方式计算标记数:

    import tiktoken
    
    def num_tokens_from_string(string: str, encoding_name: str) -> int:
        """返回文本字符串中的标记数。"""
        encoding = tiktoken.get_encoding(encoding_name)
        num_tokens = len(encoding.encode(string))
        return num_tokens
    
    # 示例:计算标记数
    text = "tiktoken is great!"
    encoding_name = "cl100k_base"
    num_tokens = num_tokens_from_string(text, encoding_name)
    print(f"文本中的标记数:{num_tokens}")

    上述代码将输出文本中的标记数。在这个示例中,文本 “tiktoken is great!” 有6个标记。

    将标记转换为文本

    如果你想将标记转换回文本,你可以使用以下方法:

    import tiktoken
    
    def tokens_to_text(tokens, encoding_name: str) -> str:
        """将标记列表转换为文本字符串。"""
        encoding = tiktoken.get_encoding(encoding_name)
        text = encoding.decode(tokens)
        return text
    
    # 示例:将标记转换为文本
    tokens = [83, 1609, 5963, 374, 2294, 0]
    encoding_name = "cl100k_base"
    text = tokens_to_text(tokens, encoding_name)
    print(f"标记转换为文本:{text}")

    在上面的示例中,标记列表 [83, 1609, 5963, 374, 2294, 0] 被转换回了文本 “tiktoken is great!”。

    比较不同的编码

    不同的编码方式可能在如何分割单词、处理空格以及处理非英文字符方面有所不同。使用上述方法,我们可以比较不同编码在几个示例文本上的表现:

    import tiktoken
    
    def compare_encodings(example_string: str) -> None:
        """比较三种字符串编码的表现。"""
        # 打印示例字符串
        print(f'\n示例字符串: "{example_string}"')
        # 对于每种编码,打印标记数、标记整数和标记字节
        for encoding_name in ["r50k_base", "p50k_base", "cl100k_base"]:
            encoding = tiktoken.get_encoding(encoding_name)
            token_integers = encoding.encode(example_string)
            num_tokens = len(token_integers)
            token_bytes = [encoding.decode_single_token_bytes(token) for token in token_integers]
            print()
            print(f"{encoding_name}: {num_tokens} 个标记")
            print(f"标记整数: {token_integers}")
            print(f"标记字节: {token_bytes}")
    
    # 示例:比较编码
    compare_encodings("antidisestablishmentarianism")
    compare_encodings("2 + 2 = 4")
    compare_encodings("お誕生日おめでとう")

    通过上述代码,你可以比较不同编码在示例文本上的表现。这将有助于你选择最适合你的应用程序的编码方式。

    在聊天完成API调用中计算标记数

    对于ChatGPT模型,如gpt-3.5-turbo和gpt-4,它们使用的标记方式与旧的完成模型相同,但由于它们的消息格式,更难计算会话中将使用多少标记。

    以下是一个用于计算传递给gpt-3.5-turbo或gpt-

    4的消息中标记数的示例Python代码:

    import tiktoken
    
    def num_tokens_in_chat(messages: list, encoding_name: str) -> int:
        """计算聊天消息中的标记数。"""
        encoding = tiktoken.get_encoding(encoding_name)
        total_tokens = 0
        for message in messages:
            role = message["role"]
            content = message["content"]
            if role == "system":
                # 系统消息不包含标记
                continue
            elif role == "user" or role == "assistant":
                # 用户和助手消息包含标记
                tokens = encoding.encode(content)
                total_tokens += len(tokens)
        return total_tokens
    
    # 示例:计算聊天消息中的标记数
    chat_messages = [
        {"role": "user", "content": "tell me a joke"},
        {"role": "assistant", "content": "why did the chicken cross the road"},
        {"role": "user", "content": "I don't know, why did the chicken cross the road"},
    ]
    encoding_name = "cl100k_base"
    num_tokens = num_tokens_in_chat(chat_messages, encoding_name)
    print(f"聊天消息中的标记数:{num_tokens}")

    在上面的示例中,我们计算了一个包含用户和助手消息的聊天中的标记数。你可以根据自己的聊天数据和所选的编码来计算标记数。

    这就是如何使用tiktoken计算文本中的标记数,无论是用于一般文本处理还是用于聊天API调用,这个工具都可以帮助你更好地管理标记。希望这个教程对你有所帮助!如果你有任何问题或需要进一步的协助,请随时提问。

  • ChatGPT技术揭秘:为什么它能如此强大

    ChatGPT技术揭秘:为什么它能如此强大

    曾几何时,我们沉浸在科幻小说和电影中,对于人工智能的无限想象中。如今,这些幻想正逐渐变为现实,而ChatGPT则是其中一个令人惊叹的成果。本文将深入探讨ChatGPT的技术内幕,揭示其为何如此强大,以及它是如何利用现有技术的潜力来实现这一壮举的。

    一、Transformer框架:变形金刚的崭露头角

    ChatGPT采用了Transformer框架,这一框架被誉为“变形金刚”,因为它具备处理空间信息和时序信息的能力。相对于传统的CNN和RNN模型,Transformer可以同时处理空间信息和时序信息,这使得它在自然语言处理任务中表现出色。Transformer的自注意力机制和多头注意力机制更进一步增强了模型捕捉文本中的前后依赖关系,使其在处理长序列信息时领先于传统的RNN模型。

    二、预训练和微调:提高泛化能力

    ChatGPT的成功离不开预训练技术。它首先使用大量无标签数据对模型进行初步训练,这有助于模型更好地理解和处理自然语言。然后,通过微调技术,在特定任务上进行有监督的训练,进一步提高了模型性能。这种方法不仅节省了训练时间和计算资源,还大幅提高了ChatGPT的泛化能力,使其能够在各种自然语言处理任务中表现出色。

    三、跨语言迁移学习:扩展应用场景

    ChatGPT还引入了跨语言迁移学习,这一技术使得模型在不同语言之间能够迁移知识。例如,通过在英文模型基础上进行中文语言的预训练,ChatGPT可以在中文自然语言处理任务中表现出色。这一技术扩展了ChatGPT的应用领域,使其能够处理多种语言。

    四、分布式机器学习框架Ray:强大的支持

    ChatGPT的训练需要大量的计算资源,参数量庞大,因此如何提高并行计算能力成为了研究重点。Ray是一个分布式机器学习框架,它能够将不同硬件作为一个单元来管理,协调训练过程,并解决硬件冲突问题。这使得ChatGPT的训练变得更加高效,可以在不同硬件上运行,包括谷歌云、AWS等。另外,Google的JAX框架也备受关注,被视为与Ray竞争的框架。

    五、分布式技术:提升训练速度和效率

    在深度学习中,分布式技术发挥了重要作用。以下是一些常见的分布式技术概念:

    • 数据并行:将输入数据分成多个小批次,分配到不同GPU内存进行处理,提高训练速度和效率。

    • 模型并行:将模型分解成多个子模型,分配到不同GPU芯片上进行处理,提高模型的处理能力。

    • 模型平行:将模型分解成多个层,分配到不同GPU芯片上进行处理,帮助模型处理更大的数据集。

    • 集群并行:将模型分布式部署在多个计算机上,连接不同计算机与GPU,处理更大规模的数据集。

    • 整合:使用以上多种技术的组合,以达到更高的训练速度和处理效率。

    六、强化学习中的算法和框架

    最后,让我们思考一下不同的算法和框架在强化学习中的应用。强化学习是一门涉及决策和行动的领域,各种算法和框架在此领域都有广泛的应用。例如,TensorFlow、PyTorch等深度学习框架与强化学习库结合使用,用于训练智能体。此外,Ray框架也与强化学习库兼容,为分布式强化学习提供了强大支持。

    结语

    ChatGPT之所以如此强大,不仅在于其采用了Transformer框架、预训练和微调技术,还在于分布式机器学习框架Ray的支持以及分布式技术的应用。这一组合使得ChatGPT能够在各种自然语言处理任务中表现出色,同时为强化学习等领域提供了有力的工具。

    希望本文能够帮助你更好地理解ChatGPT的技术内幕,并对人工智能和深度学习的未来充满期待。

  • 如何用克拉默法则解决罗盘谜题

    如何用克拉默法则解决罗盘谜题

    在这个教程中,我们将介绍如何使用克拉默法则解决一个有趣的罗盘谜题。这个谜题涉及三个旋转的圆盘,每个圆盘都可以按照不同的规则旋转,目标是将它们都旋转到特定的角度。我们将使用克拉默法则来解决这个谜题,找到满足条件的解。让我们开始吧!

    背景故事

    想象一下,你被困在一个神秘的房间里,房间的中心有一个奇怪的装置,上面有三个旋转的圆盘。每个圆盘都有不同的旋转规则,包括旋转方向和步长。你的任务是将这三个圆盘都旋转到角度为180度的位置,但是你不知道如何操作这些圆盘。

    幸运的是,你有一本关于克拉默法则的笔记,你决定使用这个方法来解决这个问题。你开始分析每个圆盘的旋转规则和它们之间的联动规则,然后使用克拉默法则计算出每个圆盘需要旋转的次数,最终找到了解决这个谜题的方法。

    罗盘谜题

    这个罗盘谜题涉及三个圆盘,分别是内圈、中圈和外圈。每个圆盘都有以下属性:

    • 旋转方向:可以是逆时针或顺时针。
    • 旋转步长:用亮着的星星数量表示。
    • 初始角度:以角度/60的值表示。

    除此之外,还有联动规则,规定了哪些圆盘会联动旋转,哪些不会。这些规则以列表的形式给出,其中0表示内圈,1表示中圈,2表示外圈,-1表示不联动。

    使用克拉默法则解决问题

    要解决这个罗盘谜题,我们可以使用克拉默法则,该方法通常用于解决线性方程组。我们将每个圆盘的旋转次数表示为x、y和z,然后设置以下方程:

    • 内圈旋转次数:存在(self.coordination[0], 0) x + 存在(self.coordination[1], 0) y + 存在(self.coordination[2], 0) * z = 计算(self.disk[0][“init”], self.disk[0][“direction”], self.disk[0][“rotate”])
    • 中圈旋转次数:存在(self.coordination[0], 1) x + 存在(self.coordination[1], 1) y + 存在(self.coordination[2], 1) * z = 计算(self.disk[1][“init”], self.disk[1][“direction”], self.disk[1][“rotate”])
    • 外圈旋转次数:存在(self.coordination[0], 2) x + 存在(self.coordination[1], 2) y + 存在(self.coordination[2], 2) * z = 计算(self.disk[2][“init”], self.disk[2][“direction”], self.disk[2][“rotate”])

    这些方程中的系数矩阵可以用克拉默法则来解决,我们首先计算原行列式值D。然后,我们可以通过遍历的方式,找到满足整数解和非负解的x、y和z。这将是解决罗盘谜题的答案。

    下面是用Python实现的代码和算法:

    import copy
    
    class CompassPuzzleSolver:
        def __init__(self):
            # 初始化罗盘信息...
            # 省略了与文章中相同的初始化部分
            # ...
    
        # 计算到达180度所需的次数
        @staticmethod
        def count(angle: int, direction: int, rotate: int) -> int:
            b = 0
            while True:
                if angle % 180 == 0 and angle % 360 != 0:
                    return b
                else:
                    angle = angle - direction * rotate
                    b += 1
    
        # 行列式计算
        @staticmethod
        def calculate(matrix_temp: list, replace: list = [], index: int = -1) -> int:
            matrix = copy.deepcopy(matrix_temp)
            if index != -1:
                matrix[0][index], matrix[1][index], matrix[2][index] = replace[0], replace[1], replace[2]
            return \
            matrix[0][0] * matrix[1][1] * matrix[2][2] + \
            matrix[0][1] * matrix[1][2] * matrix[2][0] + \
            matrix[0][2] * matrix[1][0] * matrix[2][1] - \
            matrix[0][2] * matrix[1][1] * matrix[2][0] - \
            matrix[0][1] * matrix[1][0] * matrix[2][2] - \
            matrix[0][0] * matrix[1][2] * matrix[2][1]
    
        # 答案计算主程序
        def solve_puzzle(self) -> bool:
            # 最终目标:三圈状态均为180
            # x, y, z 三个变量,分别对应三个联动规则所需次数
            # ...
    
            # 使用克拉默法则计算...
            # 省略了计算部分的代码
            # ...
    
            # 找到满足条件的解
            # 省略了遍历部分的代码
            # ...
    
    # 创建罗盘谜题解决器对象
    solver = CompassPuzzleSolver()
    # 解决谜题并打印答案
    if solver.solve_puzzle():
    
     print("成功找到解决罗盘谜题的方法!")
    else:
        print("未找到解决罗盘谜题的方法。")
    

    结论

    通过使用克拉默法则和Python编程,我们成功解决了这个有趣的罗盘谜题,找到了每个圆盘需要旋转的次数。这个方法可以用于解决类似的问题,其中涉及多个变量和约束条件。

    如果你也喜欢解决谜题和挑战性的问题,不妨尝试一下这个罗盘谜题,看看你能否找到更快的解决方法!

    希望这篇教程对你有所帮助,如果你对克拉默法则或其他数学方法有更多的兴趣,请继续关注我的博客,我们将继续分享有趣的数学和科学知识。

  • 制作漂亮的二维码:QRBTF网站和React组件

    制作漂亮的二维码:QRBTF网站和React组件

    在数字化时代,二维码已经成为了不可或缺的一部分,用于快速传递信息。然而,通常情况下,二维码看起来都很相似,缺乏个性和创意。如果你想要制作一个独特且漂亮的二维码,QRBTF是一个值得一试的工具。本文将介绍QRBTF网站和其对应的React组件,让你可以轻松地制作漂亮的二维码。

    什么是QRBTF?

    QRBTF是一个简单的Web应用程序,旨在美化你的二维码。如果你曾经对传统的黑白二维码感到厌倦,那么QRBTF将为你提供一些全新的可能性。它的特点包括:

    1. 各种艺术风格的二维码

    QRBTF提供了多种不同的艺术风格,让你可以选择一个适合你需求和品味的样式。无论是想要一个简单的二维码还是一个充满创意的艺术品,QRBTF都能满足你的要求。

    2. 参数化设计

    除了选择风格之外,你还可以调整二维码的各种参数,包括大小、透明度、颜色等等。这意味着你可以根据自己的喜好定制二维码,使其更符合你的品牌或个性。

    3. 无需后端支持

    QRBTF是一个纯前端应用程序,不需要后端服务器支持。这意味着你可以轻松地在任何Web浏览器中使用它,无需安装复杂的软件或依赖。

    4. 支持SVG下载

    除了普通的JPG格式,QRBTF还支持将二维码保存为可缩放矢量图(SVG)。这意味着你可以根据需要放大或缩小二维码,而不会损失图像质量。

    如何使用QRBTF?

    QRBTF的使用非常简单,无需编程或复杂的步骤。以下是使用QRBTF的基本步骤:

    1. 打开QRBTF网站

    首先,打开QRBTF的官方网站 qrbtf.com。这将带你进入QRBTF的主界面。

    2. 输入URL或文本

    在网站上找到一个文本框,你可以在这里输入要包含在二维码中的URL或文本。这可以是你的网站链接、联系信息、产品信息,或任何你想要分享的内容。

    3. 选择风格

    QRBTF提供了各种不同的二维码风格供你选择。浏览并选择一个你喜欢的风格,或者根据你的需求选择一个适合的风格。

    4. 调整参数

    QRBTF允许你调整二维码的各种参数。你可以改变二维码的大小、透明度、颜色等等。这些参数可以让你个性化定制二维码,以满足你的需求。

    5. 下载JPG或SVG

    一旦你满意了二维码的外观,你可以选择将其下载为JPG或SVG格式。JPG格式适用于常规用途,而SVG格式适用于需要可缩放性的情况。

    使用React组件

    如果你是React开发者,你还可以使用QRBTF的React组件来轻松集成QRBTF功能到你的应用程序中。React组件名为react-qrbtf,你可以通过npm来安装它。

    npm install react-qrbtf --save

    然后,你可以在你的React应用程序中包含这个组件,并使用它来生成漂亮的二维码。以下是一个简单的示例:

    import React from 'react'
    import { QRNormal } from 'react-qrbtf'
    
    class Component extends React.Component {
    
        render() {
            return (
                <QRNormal
                    value="react-qrbtf"
                    className="my-qrcode"
                    styles={{ svg: {width: "200px"} }}
                    type="round"
                    size={50}
                    opacity={80}
                    posType="planet"
                    otherColor="#33CCCC"
                    posColor="#009999"
                />
            )
        }
    }

    第三方项目

    除了QRBTF本身,还有一些第三方项目与之相关。例如,gexin1/beautify-qrcode 是一个用于美化二维码的库,可以帮助你实现更多定制化的效果。

    作者

    QRBTF项目由两位开发者共同维护,分别是 ciaochaos 和 CPunisher。如果你喜欢他们的工作,你可以考虑通过Paypal或支付宝向他们捐赠,以支持项目的继续发展。

    依赖库

    QRBTF依赖于一些开源库,包括 davidshimjs/qrcode 和 cozmo/jsQR。这些库为QRBTF提供了二维码生成和解析的基础功能。

    结语

    QRBTF是一个强大而创新的工具,可以让你制作漂亮的二维码。无论是作为个人用户还是开发者,你都可以从QRBTF中受益,为你的二维码增添独特的风采。现在,你可以尝试使用QRBTF创建自己的艺术二维码,让你的信息传递更有趣和个性化。