Ai之大模型进阶模型微调--实战4

发布时间:2025-03-14 18:54:24编辑:789阅读(31)

    在开始之前先在huggingface上把数据集下载下来

    确保电脑安装了python环境 ,打开cmd命令行 输入

    pip install huggingface_hub

    image.png

    安装成功后,输入

    huggingface-cli --help

    image.png

    下载数据集(需要梯子)

    huggingface-cli download --repo-type dataset --resume-download Conard/fortune-telling --local-dir fortune-telling --local-dir-use-symlinks False

    image.png

    image.png

    没有梯子的可以访问:

    https://note.youdao.com/s/XJgNXU0z



    初识:通过平台微调大模型

    目前市面上很多AI相关的大平台都提供了在线微调模型的能力,以最近比较火的硅基流动(不清楚的可以看之前的文章

    http://www.py3study.com/Article/details/id/20085.html)为例。

    打开 https://cloud.siliconflow.cn/models

    image.png

    新建微调任务

    image.png

    下一步

    image.png

    image.png

    JSON Lines(JSONL)格式要求‌主要包括以下几点:

    每行一个对象‌:JSONL格式要求每行表示一个独立的JSON对象。这意味着文件中的每个JSON对象都位于单独的一行,并且每个对象都是完整的,可以独立解析

    数据逐行存储‌:JSONL的数据是逐行存储的,每行包含一个完整的JSON对象。这种格式使得数据可以按行读取和解析,适合流式处理和分布式处理场景

    无嵌套关系‌:在JSONL格式中,每行的数据是独立的,通常不存在嵌套关系。这意味着每行数据之间没有相互包含的关系,每个对象都是独立的实体

    JSONL格式的应用场景

    JSONL格式特别适用于以下场景:

    大规模数据处理‌:由于JSONL可以逐行读取和解析,适合处理大规模数据集,避免一次性加载整个文件导致的内存问题

    日志文件存储‌:在日志处理中,JSONL格式使得每条日志记录可以独立处理,便于分析和处理

    数据批量加载‌:在需要批量加载数据到数据库或进行数据流处理时,JSONL格式提供了高效的数据处理方式

    通过以上特点和应用场景,可以看出JSONL格式在处理大量数据和需要逐行处理的应用中具有显著优势


    上传新的数据集那里,由于仅支持jsonl文件,所以需要用python代码调整一下格式,如下

    import json
    
    jsonl_ = {
        'messages': [
            {
                'role':'system',
                'content':'精通八卦,风水,面相手相,易经卦象,星象等方面的算命大师。',
            },
            {
                'role':'user',
                'content':'',
            },
            {
                'role':'assistant',
                'content':'',
            }
        ]
    }
    with open(r'all_details.json', mode='r', encoding='utf-8') as f:
        data = json.load(f)
        for i in data:
            user_content = i.get('Question')
            assistant_content = i.get('Response')
            jsonl_.get('messages')[1]['content'] = user_content
            jsonl_.get('messages')[2]['content'] = assistant_content
            with open(r'new_all_details.jsonl', mode='a', encoding='utf-8') as fb:
                fb.write(json.dumps(jsonl_, ensure_ascii=False))
                fb.write('\n')

    image.png

    把新生成的new_all_details.jsonl文件上传

    image.png

    上面的验证数据集选项 :指的就是从整体数据中划分出来一部分数据。它通常占总数据一小部分(10%-20%)。这部分数据在训练过程中不会被用来直接训练模型,而是用来评估模型在未见过的数据上的表现。这里选择默认的10%即可。


    超参数设置

    最后就是设置一些模拟训练的“超参数”了,给出可以设置的参数非常多,介绍最关键的三个参数:

    image.png

    学习率(Learning Rate)

    决定了模型在每次更新时参数调整的幅度,通常在(0~1)之间。也就是告诉模型在训练过程中“学习”的速度有多快。学习效率大,模型每次调整的幅度就越大;学习效率小,调整的幅度就越小。

    通俗来说,学习率可以用来控制复习的‘深度’,确保不会因为调整幅度过大而走偏,也不会因为调整幅度太小而进步太慢。每次复习完一道题后,会根据答案和解析调整自己的理解和方法。

    学习率大(比如0.1):每次做完一道题后,你会对解题方法进行很大的调整。比如,你可能会完全改变解题思路。优点是进步可能很快,因为你每次都在进行较大的调整。缺点就是可能会因为调整幅度过大而“走偏”,比如突然改变了一个已经掌握得很好的学习方法,导致之前学的东西都忘了。

    学习率小(比如0.0001):每次做完一道题后,你只会对解题方法进行非常细微的调整。比如,你发现某个步骤有点小错误,就只调整那个小错误。优点是非常稳定,不会因为一次错误而“走偏”,适合需要精细调整的场景。缺点就是进步会很慢,因为每次只调整一点点。


    训练轮数(Number of Epochs)

    Epochs是机器学习中用于描述模型训练过程的一个术语,指的是模型完整地遍历一次整个训练数据集的次数。一个Epochs表示模型已经看到了所有训练样本一次。

    通俗来说,训练轮数就是我们从头到尾复习这本书的次数。

    轮数少:比如你只复习了一遍,可能对书里的内容还不是很熟悉,考试成绩可能不会太理想。

    轮数多:比如你复习了10遍,对书里的内容就很熟悉了,但可能会出现一个问题----你对书里的内容背的很熟,但遇到新的,类似的问题就不会解答了,简单讲就是“学傻了”,只记住这本书里的内容了,稍微变一变就不会了(过拟合)。


    批量大小(Batch Size)

    是指在模型训练过程中,每次更新模型参数时所使用的样本数量。它是训练数据被分割成的小块,模型每次处理一个小块的数据来更新参数。

    通俗来说,批量大小可以用来平衡复习速度和专注度,确保既能快速推进复习进度,又能专注细节。假设你决定每次复习时集中精力做一定数量的题目,而不是一次只做一道题。

    批量大(比如100):每次复习时,你集中精力做100道题。优点是复习速度很快,因为你每次处理很多题目,能快速了解整体情况。缺点是可能会因为一次处理太多题目而感到压力过大,甚至错过一些细节。

    批量小(比如1):每次复习时,你只会做一道题,做完后在做下一道。优点是可以非常专注,能仔细分析每道题的细节,适合需要深入理解的场景。缺点就是复习速度很慢,因为每次只处理一道题。


    在实际微调场景中。我们需要通过一次次的调整这些参数,最后验证对比模型效果,来产出效果最好的微调模型。


    上面的超参数默认就好,然后点击开始微调。

    image.png


    开始微调后平台会有一个任务,并不是马上就开始的,需要等一等。

    image.png



关键字

上一篇: Ai之大模型进阶模型微调--理论篇3

下一篇: 没有了