作者归档:admin

Deekseek R1 MLX微调

下载微调的原始大模型数据:

https://hf-mirror.com/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

设置下载镜像

export HF_ENDPOINT=https://hf-mirror.com

下载:

huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local-dir R1-1.5B

设置微调数据

默认已经安装MLX的框架,且当前位于mlx框架内,其中路径为(./mlx-examples/lora下)执行

#修改其中lora/data/train.jsonl 的数据用于LORA微调

#修改其中lora/data/train.jsonl

#替换为下面的数据  Completion(一问一答)

{"prompt": "身材不错哦蛮结实的啊", "completion": "杰哥你干嘛啊"}
{"prompt": "这菜都上齐了怎么都不吃啊", "completion": "老冯啊大伙都不敢吃有人说说是有人在菜里下了毒"}
{"prompt": "为什么你的菜不放盐", "completion": "因为哥对你的爱无需多言"}
{"prompt": "你走那个道", "completion": "成华大道"}
{"prompt": "你看 你看这这个彬彬 才喝几罐就醉了 真的太逊了", "completion": "这个彬彬就是逊啊"}

开始微调

mlx_lm.lora --model ../../R1-1.5B --train --data ./data

训练后,在lora/adapters 生成一堆文件,需要将其合并

mlx_lm.fuse --model ../../R1-1.5B  --adapter-path adapters --save-path R1-1.5B-test

验证

原始

mlx_lm.generate --model ../../R1-1.5B --prompt "这菜都上齐了怎么都不吃啊"

微调好的

mlx_lm.generate --model R1-1.5B-test --prompt "这菜都上齐了怎么都不吃啊"

LORA DX-LR03测试 micropython

from machine import I2C,Pin,UART
import time
from ssd1306 import SSD1306_I2C#I2C的oled选该方法
i2c=I2C(0,sda=Pin(3), scl=Pin(2), freq=400000) 
oled = SSD1306_I2C(128, 64, i2c) #你的OLED分辨率,使用I2C
oled.fill(1) #清空屏幕
oled.show()


t=15
while t>0:
    oled.fill(0)
    oled.text("INIT LORA "+str(t)+"S",0,9,1)
    t=t-1
    oled.show()
    time.sleep(1)

u=UART(1,9600,tx=Pin(0),rx=Pin(1))

def lora(i):
    time.sleep(3)
    c=u.read()
    print(c)
    if type(c) is bytes:
        i=i+1
        oled.fill(0)
        oled.text(c.decode(),0,9,1)
        e=time.localtime()
        timestr=str(e[0])+"-"+str(e[1])+"-"+str(e[2])+" "+str(e[3])+":"+str(e[4])
        oled.text(timestr,0,20,1)
        oled.text(str(i),0,30,1)
        oled.show()
    return i

i=0
while 1:
    i=lora(i)

城市大概3KM以内,保险起见2KM,电梯内无信号,使用LEVEL0 最低速度

大夏龙雀 LORA01 LORA03

大夏龙雀家的这两个LORA模块,01 模块22dbm,最大8KM, 03模块 27dbm,最大10KM。可以使用UART操作,默认比特率9600

3个模式 ,AT+MODE0 AT+MODE1 AT+MODE2 ;共31个信道 从00到1E。

1.透明传输 最简单,可以直接使用,仅用level来区分,请尽量保持两模块间同一信道。

2.点对点,2字节地址码,1字节信道码(),再加level速率匹配。传输时 地址信道数据

坑点:发送数据必须以16位hex发送,直接怼字符串不行的且必须是,两个hex对应一个字节,所以必须双数。

3.广播模式,对同一信道下的模块进行广播。传输时 信道数据

坑点:与点对点类似 必须Hex格式哦。

Thinkphp模型中使用分页paginate ;thinkCMF6

基础版本:
控制器

    $csc=$topics->alias("a")
            ->leftJoin("meeting b","b.id=a.meeting_id")
            ->join("topics_own c","c.tid=a.id")
            ->join("upleader d","d.id=c.upid")
            ->where($where)->field("a.*")
            ->order("status")
            ->order("b.date desc")
            ->group("a.id")
            ->field("a.*,count(*) as count")
            ->paginate(10);
 $csc->appends($this->request->param());
 $this->assign(["list"=>$csc,"user"=>$this->user_info()]);
#$csc为传入分页信息、控制每页显示设置为10,若要其他数目请另外设置

模板

    <div class="row text-center">
        <div class="pagination">{$info->render()}</div>
        <p class="text-muted">---共计<b class="text-danger">{$info->total()}</b>条---</p>
    </div>

模型创建:

<?php
namespace app\model;

use think\Model;

class User extends Model
{
    protected $table = 'users';

    // 添加一个方法用于获取分页数据
    public static function getPaginatedData($pageSize = 10)
    {
        return self::paginate($pageSize, false, ['query' => request()->param()]);
    }
}

控制器调用

<?php
namespace app\controller;

use app\model\User;
use think\facade\Request;

class UserController
{
    public function index()
    {
        // 获取分页数据
        $pageSize = Request::param('pageSize', 10); // 可以通过请求动态获取每页显示条数
        $users = User::getPaginatedData($pageSize);

        // 返回视图并传递分页数据
        return view('user/index', ['users' => $users]);
    }
}

LLM的不成熟见解

通过模拟人类的多感官输入和多样化的输出机制,让大型语言模型(LLM)能够更接近人类的思维模式,从而实现更有效的思考、自训练和自我更新。

人之所以成为人,在于不断思考,不断的接受和处理外部信息。

但是目前我接触到的LLM是基于对话交互,所以只有当人给予对话作为输入时才会有相应的反馈。对于这样的反应,压根就不是人类的情况,哪有人会这样只有一个接受渠道,再一个反馈渠道,就是一个输入输出的机器。

因此,我的理解是要对其加入不断输入输出的情况。可以把现场的情况(电压,功率,剩余电量,开机时间,温湿度,当天的天气情况,现场周围的声音,图片等等输入,达到模拟感官:视觉 听觉 嗅觉 触觉 等等),然后有个输出机制,可以输出到文档,或者数据库等等,或者让LLM自己决定。不断的输入输出,相当于不断的思考,但是思考是会有成果的,可以再结合上面的输入输出以及对话的输入输出,进行自训练,以达到成为人的思维。

不断思考,不断进步(训练或者微调),更新自我。