个人版 AI 辅助系统的尝试

在 CSDN 的时候,我就一直想要有自己的 AI 工作环境。我们组只有一台高配的办公服务器,用于训练模型,分析数据。通常来说这台机器都很忙。如果想要
做一些研究工作或试验,资源就有点紧张了。而我自己的工作机,虽然是一台买了只有四五年的高配 MacBook Pro,但是做 AI 已经不太够用。即使训练一个非常
朴素的文本分类器,也要花费太多时间。那几年我偏好用传统的算法而非 AI 工具解决问题,其实也有这个原因。并非我不能驾驭 AI 技术,只是因地制宜而已。
何况团队里的年轻人们对 AI 相关工作做的非常好,我更关注那些更需要有人站出来解决的东西。

说起来还是要感谢 CSDN,我正是用离职时的补偿,买了这台满配的 MacBook Pro 。128 内存,
16 core cpu + 40 core gpu + 16 core npu 的 M3 MAX。足够我运行常规的 AI 算法,一些规模不太大的 LLM 模型也完全可以运行。

对于 AI 系统,我的目标是:

  1. 虽然现在互联网上有越来越多的 AI 服务,免费的也不在少数,但是我仍然希望可以建立一套可以脱离外部服务的私人工具系统
  2. 这套 AI 系统首先应该对我有实用价值,能够完成一些常规的软件应用不容易做到的事情。比如一些智能化的文档生成、翻译和代码生成工作
  3. 我可以通过调整和训练,使AI 系统更符合自己的需求,这里面包含了应用软件配置、开发,模型的调整甚至训练,总之,这套系统对我应该是个白盒。

经过一段时间的尝试,我初步的达到了这些目的。

最初,我尝试过直接用 torch 或 tensorflow 这样的框架运行模型,后来很快发现即使这台满配的机器,运行 30B 的 LLM 也有些吃力,毕竟现在的 AI
产业已经普遍使用价格高昂的超级显卡。而我,只是一个希望一次投资可以尽可能多用的穷人。

很快,我开始尝试用同好们推荐的 llama.cpp 和 ollama 来运行模型。尽管看起来这两个工具有些重叠,它们都可以基于 cpp 构建的运行时运行模型,
都提供了 server ,部署客户端也很方便。但是经过实践,llama.cpp 有更好的泛用性,有些模型 ollama 不能识别,但是 llama.cpp 可以加载并处理
为 gguf 格式。而经过 llama.cpp 处理后的模型,ollama 是可以加载的。另一方面,在我的机器上,llama.cpp 运行 70b 的模型,慢到无法使用,
而 ollama 可以。至少在 M3 硬件环境中,ollama 表现出了更好的性能。

再接下来,就是我在 oliva 项目中发布的词法分析器工具,它可以把几个我常用的编程语言,C、Java、
Python、Scala 等等处理为 alpaca lora 格式。用于微调模型,目前我正在尝试基于 llamacode 的几个小规模版本,训练出一个适合我自己的版本。
因为从我自己的体验看,codellama 对c语言和 scala 的支持并不强,高版本的 java 应该也还没有引入,而这些是我需要的。甚至可以说我搭建这套
私有 AI 系统,一个重要的目标就是辅助我写一些 c 代码。目前的实验来看,llama factory
项目能够完成这个工作。

我完全没想到的是,整个工具链上,我最不满意的居然是客户端,是的,我试用了 ollama 官网上推荐的好几个客户端应用,都不符合我的期待,有些有配
置问题,有些对中文支持的非常差,有些使用起来很繁琐。于是我用 Python 写了一个命令行工具
Blue Shell。用于日常工作。这个工具支持行编辑,能够可靠的支持中文,可以支持 codellama 的
markdown 输出,可以方便的连接指定的 ollama 。也许将来,我还会再开发一些 GUI 客户端或者开发工具的插件。但是目前,这个工具体系已经初步的
运行起来了。我已经开始用 AI 为 Jaskell 项目生成单元测试代码——嗯其实我也希望它能做一些更智能的编程工作,但是目前看,真正需要创造力的部分,
还是不能指望这些概率模型的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Vue的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统,来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术,MYSQL数据库存储数据,基于SSMVue框架开发。在网站的整个开发过程中,首先对…

clipboard.js实现复制和粘贴

// 复制文本到剪贴板 function copyToClipboard(text) {navigator.clipboard.writeText(text).then(() > {console.log(Text copied to clipboard);}).catch((error) > {console.error(Failed to copy text:, error);}); }// 从剪贴板粘贴文本 function pasteFromClipboa…

linux网络管理_网络接口名称规则

11.1 网络接口名称规则 11.1.1 简介 目标:认识网卡》》找到网卡文件》》学会修改文件》》多台服务器互通 网络接口名称 ​ 传统上,Linux中的网络接口被枚举为eth0 (ethernet0)、eth1、eth2等,然而使用这些网络设备名可能遇到不确定性,且不…

面试算法56:二叉搜索树中两个节点的值之和

题目 给定一棵二叉搜索树和一个值k,请判断该二叉搜索树中是否存在值之和等于k的两个节点。假设二叉搜索树中节点的值均唯一。例如,在如图8.12所示的二叉搜索树中,存在值之和等于12的两个节点(节点5和节点7)&#xff0…

WebSocket网络协议

一、简介 WebSocket 是一种在客户端和服务器之间建立双向通信信道的网络协议。它在客户端和服务器之间建立一个持久的、全双工的连接,允许数据在两个方向上实时传输,而不需要像HTTP一样进行多次请求和响应。 WebSocket 的主要优势是减少了服务器和客户…

Redis发布与订阅

什么是发布与订阅 答: redis发布订阅是一种消息通信通信模式,由发送者(pub)发送消息,订阅者(sub)接收消息。 如下图client2、4、5就是订阅着,订阅了channel1的消息。 当channel1要发送消息时,这几个订阅者都会实时收到消息。 发布订阅的方式…

C++ STL泛型算法

泛型算法 <algorithm>定义了大约 80 个标准算法。 它们操作由一对迭代器定义的&#xff08;输入&#xff09;序列或单一迭代器定义的&#xff08;输出&#xff09;序列。 当对两个序列进行拷贝、比较操作时&#xff0c;第一个序列由一对迭代器[b,e)表示&#xff0c;但第…

移动零算法(leetcode第283题)

题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2:输入: n…

用uniapp写一个点击左侧可以滑动的menu

完成后的图片&#xff08;点击左侧右边或滑动&#xff0c;滑动右边左侧的选中也会变化&#xff09;&#xff1a; 数据js &#xff08;classifyData&#xff09;&#xff1a; export default[{"name": "女装","foods": [{"name": &q…

消息幂等:如何保证消息不被重复消费?

应用的幂等是在分布式系统设计时必须要考虑的一个方面&#xff0c;如果对幂等没有额外的考虑&#xff0c;那么在消息失败重新投递&#xff0c;或者远程服务重试时&#xff0c;可能会出现许多诡异的问题。本文一起来看一下&#xff0c;在消息队列应用中&#xff0c;如何处理因为…

命名之美:探索Java的标识符与命名规范

目录 ​编辑 前言 一、Java关键字&#xff1a; class&#xff1a; public、private、protected&#xff1a; static&#xff1a; final&#xff1a; void&#xff1a; int、double、char、boolean&#xff1a; if、else、switch&#xff1a; for、while、do&#xf…

01到底应该怎么理解“平均负载”

1、如何了解系统的负载情况&#xff1f; 每次发现系统变慢时&#xff0c; 我们通常做的第⼀件事&#xff0c; 就是执⾏top或者uptime命令&#xff0c; 来了解系统的负载情况。 ⽐如像下⾯这样&#xff0c; 我在命令⾏⾥输⼊了uptime命令&#xff0c; 系统也随即给出了结果。 …

微服务组件OpenFeign的学习

OpenFeign 添加依赖OpenFeign的简单使用OpenFeign日志配置OpenFeign超时时间配置 添加依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>OpenFeign的…

思码逸关钦杰:聊聊研效管理中的数据操纵

3月25日&#xff0c;思码逸咨询总监、研发过程提效专家关钦杰在 QECon 质效城市论坛【深圳站】分享了主题为《聊聊研效管理中的数据操纵》的演讲。 以下内容根据关钦杰老师分享内容整理&#xff1a; 在生活中&#xff0c;当我们去描述客观事实的时候&#xff0c;我们经常要用…

【Source Insight4.0】解决注释中文乱码

本来用的好好的&#xff0c;结果今天创建一个新的项目就出现注释中文乱码&#xff01;&#xff01;&#xff01; 然后上网查找说要修改为【Default encoding” &#xff1a;改成System Default(Windows ANSI) 或者Chinese Simplified(GB2312)】但是我的并没有效果。 最后是选…

Spring Boot Logging中文文档

本文为官方文档直译版本。原文链接 Spring Boot Logging中文文档 引言日志格式控制台输出彩色输出 文件输出文件轮转日志级别日志组使用日志关机钩子自定义日志配置Logback 扩展特定配置文件的配置环境属性 Log4j2 扩展特定配置文件的配置环境属性查找Log4j2 系统属性 引言 Sp…

Frida05 - 高级API用法

参考文档 https://api-caller.com/2019/03/30/frida-note/ https://frida.re/docs/javascript-api/#frida 数组打印 测试代码&#xff1a; private static class Bean {String a;int b;float c; }private void test() {Bean[] beans new Bean[3];beans[0] new Bean();be…

深度学习笔记_6经典预训练网络LeNet-18解决FashionMNIST数据集

1、 调用模型库&#xff0c;定义参数&#xff0c;做数据预处理 import numpy as np import torch from torchvision.datasets import FashionMNIST import torchvision.transforms as transforms from torch.utils.data import DataLoader import torch.nn.functional as F im…

Redis——Redis常用命令

Redis提供了丰富的命令&#xff0c;可以对数据库和各种数据类型进行操作&#xff0c;这些命令可以在Windows和Linux中使用。 1、键值相关命令 1.1、KEYS KEYS用于返回满足pattern的所有key&#xff0c;pattern支持以下通配符&#xff1a; *&#xff1a;匹配任意字符。&…

Python教程81:函数的位置参数、默认参数、动态参数、关键字参数(入门必看)

1.形式参数&#xff08;Formal Parameters&#xff09;和实际参数&#xff08;Actual Parameters&#xff09;是函数或方法定义和调用过程中的两个重要概念。举个例子&#xff0c;在下面的greet函数中&#xff0c;当我们调用greet(“李白”)时&#xff0c;"李白"就是…