4 étapes pour affiner le LLM : un guide pratique pour construire de grands modèles de domaine avec SiliconCloud
Auparavant, SiliconCloud a été mis en ligne avec le modèle linguistique duFonction de réglage fin de la LoRA en ligne. En téléchargeant simplement des données de corpus et en créant une tâche de réglage fin, vous pouvez obtenir un modèle linguistique propriétaire réglé avec précision.
Récemment, le réglage fin de la LoRA en ligne LLM de SiliconCloud a été étendu aux modèles Qwen2.5-32B, Qwen2.5-14B et Llama-3.1-8B comme modèles de base du réglage fin, ce qui enrichit encore la jouabilité du réglage fin et réduit encore le coût de la formation et de l'utilisation des modèles de réglage fin.
En fait, il est très simple d'affiner un modèle propriétaire de grand langage. Grâce à la fonction de réglage fin de SiliconCloud, vous pouvez préparer seulement quelques dizaines de corpus de formation pour apporter des changements "significatifs" à votre modèle à partir du modèle de base.
préparation préliminaire
Tout d'abord, nous devons être clairs sur l'objectif de la mise au point. Souvent, le réglage fin peut aider un modèle à apprendre quelque chose qui n'a pas été inclus dans la formation, ou à développer un certain style linguistique distinctif.
Notre approche sera différente selon l'objectif poursuivi. Par exemple, si vous souhaitez que le modèle apprenne certaines connaissances du domaine, vous avez besoin de données d'entraînement contenant des questions et des réponses basées sur ces données, tandis que si vous souhaitez que le modèle apprenne un certain style de langage typique, vous avez besoin de données de dialogue avec ce style.
Préparation des données
Le réglage fin du modèle LLM exige que les données soient fournies sous la forme d'un dialogue, avec une structure de données qui est essentiellement la même que le message d'invocation du LLM. On peut dire que si l'on appelle l'interface de génération de texte, on construit les données affinées.
Vous trouverez ci-dessous un exemple de données affinées :
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "家里的火灾报警器怎么安装?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警器的安装应符合制造商的要求。具体来说,安装时应确保设备处于正常监视状态,并且连接到相应的火灾探测器和其他部件。安装位置应避免高温、潮湿和尘土较多的地方,以保证设备的正常运行。"}]}
Pour effectuer un réglage fin, il est généralement nécessaire de préparer des dizaines de données de ce type et de les enregistrer dans un fichier "jsonl" sous la forme d'une ligne par ligne :
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "家里的火灾报警器怎么安装?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警器的安装应符合制造商的要求。具体来说,安装时应确保设备处于正常监视状态,并且连接到相应的火灾探测器和其他部件。安装位置应避免高温、潮湿和尘土较多的地方,以保证设备的正常运行。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的电源要求是什么?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警控制器的主电源应采用220V、50Hz交流电源,电源线输入端应设接线端子。备用电源应为可多次充放电的蓄电池,在不超过生产厂商规定的极限放电情况下,应能将电池在24小时内充至额定容量80%以上,再充48小时后应能充满。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的声光信号有什么要求?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,火灾声警报器的声信号至少在一个方向上3米处的声压级应不小于75dB(A计权),且在任意方向上3米处的声压级应不大于120dB(A计权)。火灾光警报器的光信号在100lx~500lx环境光线下,25米处应清晰可见。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的故障信号怎么处理?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,当发生与所连接部件之间的通讯故障、备用电源充电器与备用电源间连接线断路或短路、备用电源与其负载间连接线断路或短路、主电源欠压等故障时,家用火灾报警控制器应在100秒内发出故障声、光信号,并指示故障类型。故障声信号应能手动消除,再有故障信号输入时,应能再次启动。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的自检功能怎么用?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警控制器应能对本机进行功能检查(自检)。在执行自检功能期间,受其控制的外接设备和输出接点均不应动作。自检时间超过1分钟或不能自动停止自检功能时,其非自检部位和控制器本身的火灾报警功能不应受到影响。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的信息显示有什么要求?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,采用数字、字母显示工作状态的家用火灾报警控制器应按显示火灾报警、监管报警及其他状态顺序由高至低排列信息显示等级。高等级的状态信息应优先显示,低等级状态信息显示不应影响高等级状态信息显示。显示的信息应与对应的状态一致且易于辨识。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的声压级是多少?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警控制器在各种报警状态下的声压级(正前方1米处)应不小于75dB(A计权)。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "可燃气体探测器怎么安装?"}, {"role": "assistant", "content": "根据《可燃气体报警控制器》(GB16808—2008)的规定,可燃气体探测器应按制造商的要求进行安装,并连接到可燃气体报警控制器上。安装位置应避免高温、潮湿和尘土较多的地方,以保证设备的正常运行。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "可燃气体探测器的报警功能有什么要求?"}, {"role": "assistant", "content": "根据《可燃气体报警控制器》(GB16808—2008)的规定,可燃气体探测器应具有低限报警或低限、高限两段报警功能。当有可燃气体报警信号输入时,控制器应在10秒内发出报警声、光信号,并保持至手动复位。"}]} {"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "如何检查火灾报警器的绝缘性能?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,通过绝缘电阻试验装置分别对试样的外部带电端子与机壳之间施加500V±50V直流电压,持续60秒±5秒后测量其绝缘电阻值。试样有绝缘要求的外部带电端子与机壳间的绝缘电阻值应不小于20MΩ;试样的电源输入端与机壳间的绝缘电阻值应不小于50MΩ。"}]}
Si nous avons accumulé une quantité relativement importante de données de haute qualité dans le cadre de nos activités quotidiennes, nous pouvons commencer le réglage fin en construisant des fichiers de données qui répondent aux exigences de format grâce à un simple nettoyage des données. Si nous n'avons pas accumulé suffisamment de données ou si le processus de nettoyage est plus compliqué, nous pouvons essayer de procéder à un réglage fin à l'aide de grands modèles et de construire des données avec des modèles.
Ensuite, nous utilisons un exemple pour mettre en pratique le processus de construction des données. Essayons de former un grand modèle d'"expert en lutte contre les incendies" en construisant des questions et des réponses à l'aide des normes de lutte contre les incendies.
Données sur l'ajustement tectonique
SiliconCloud fournit un modèle Qwen2.5 avec 128K contextes, ce qui est plus que suffisant pour couvrir un contenu assez riche.
Tout d'abord, nous devons préparer localement le fichier qui sera utilisé pour construire les données, par exemple "GB22370-2008 Domestic Fire Safety Systems.pdf".
Ensuite, nous devons extraire le contenu du fichier, écrire l'invite et faire en sorte que le Qwen Big Model génère des données qui répondent aux exigences susmentionnées. Cela peut être fait dans le code, ou en utilisant la fonction Dify et d'autres outils d'interface à compléter.
Prenons l'exemple de la configuration d'un flux de travail dans Dify :
1) Le fichier de configuration du nœud de départ est téléchargé et les champs de l'invite du système dans le corpus de formation sont remplis ;
2) Utilisez le nœud d'extraction de document et le nœud de code fournis avec Dify pour fusionner le contenu du fichier en texte ;
3) En utilisant le nœud LLM, appelez le modèle Qwen/Qwen2.5-72B-Instruct-128K de SiliconCloud (si la longueur du fichier est inférieure à 32K, vous pouvez choisir un autre modèle fourni par la plateforme), si vous ne trouvez pas ce modèle, vous pouvez l'ajouter en suivant les étapes suivantes :
- Settings - Model Vendor, sélectionnez SiliconFlow ;
- Cliquez sur Ajouter un modèle, reportez-vous à l'image pour remplir les paramètres requis et enregistrez.

- Un lot de données de corpus peut être obtenu après l'exécution en utilisant la sortie du macromodèle comme sortie du flux de travail ;
- Ensuite, il suffit de copier, d'enregistrer le contenu dans un fichier .jsonl et de le télécharger dans SiliconCloud pour créer la tâche de réglage fin.
Si les données générées en une seule fois ne sont pas suffisantes, il est possible de procéder à plusieurs essais pour obtenir davantage de données.
Il est important de noter que des données plus fines ne sont pas nécessairement meilleuresMême si nous ne disposons que d'une seule donnée, nous pouvons commencer le réglage fin. Même s'il n'y a qu'une seule donnée, nous pouvons commencer le réglage fin. En revanche, si nous disposons d'un grand nombre de données dont la qualité n'est pas suffisante, l'effet du réglage fin risque de ne pas être celui escompté.


app: description: '上传文件,基于文件内容,使用 SiliconCloud 128K 上下文的 Qwen2.5 模型,生成日常问答内容,JSONL 格式的语料数据 ⚠️ 注: - 由于 Dify 限制,超过 80000 字符的文件内容会被截断 - 生成内容仅供参考,可能存在幻觉或内容错漏、格式错误,请注意甄别' icon: 🤖 icon_background: '#FFEAD5' mode: workflow name: Fine-tune 语料构造器 use_icon_as_answer_icon: false kind: app version: 0.1.5 workflow: conversation_variables: [] environment_variables: [] features: file_upload: allowed_file_extensions: - .JPG - .JPEG - .PNG - .GIF - .WEBP - .SVG allowed_file_types: - image allowed_file_upload_methods: - local_file - remote_url enabled: false fileUploadConfig: audio_file_size_limit: 50 batch_count_limit: 5 file_size_limit: 15 image_file_size_limit: 10 video_file_size_limit: 100 workflow_file_upload_limit: 10 image: enabled: false number_limits: 3 transfer_methods: - local_file - remote_url number_limits: 3 opening_statement: '' retriever_resource: enabled: true sensitive_word_avoidance: enabled: false speech_to_text: enabled: false suggested_questions: [] suggested_questions_after_answer: enabled: false text_to_speech: enabled: false language: '' voice: '' graph: edges: - data: isInIteration: false sourceType: start targetType: document-extractor id: 1735807686274-source-1735807758092-target source: '1735807686274' sourceHandle: source target: '1735807758092' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: document-extractor targetType: code id: 1735807758092-source-1735807761855-target source: '1735807758092' sourceHandle: source target: '1735807761855' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: code targetType: llm id: 1735807761855-source-1735807764975-target source: '1735807761855' sourceHandle: source target: '1735807764975' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: llm targetType: end id: 1735807764975-source-1735807769820-target source: '1735807764975' sourceHandle: source target: '1735807769820' targetHandle: target type: custom zIndex: 0 nodes: - data: desc: '' selected: false title: 开始 type: start variables: - allowed_file_extensions: [] allowed_file_types: - document allowed_file_upload_methods: - local_file - remote_url label: 语料文件 max_length: 10 options: [] required: true type: file-list variable: attachments - allowed_file_extensions: [] allowed_file_types: - image allowed_file_upload_methods: - local_file - remote_url label: 触发词(训练中的 system prompt) max_length: 48 options: [] required: true type: text-input variable: trigger height: 116 id: '1735807686274' position: x: 30 y: 258 positionAbsolute: x: 30 y: 258 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' is_array_file: true selected: false title: 文档提取器 type: document-extractor variable_selector: - '1735807686274' - attachments height: 92 id: '1735807758092' position: x: 334 y: 258 positionAbsolute: x: 334 y: 258 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: code: "def main(articleSections: list) -> dict:\n try:\n # 将列表项合并为字符串\n\ \ combined_text = \"\\n\".join(articleSections)\n \n \ \ # 截取前80000个字符\n truncated_text = combined_text[:80000]\n \ \ \n return {\n \"result\": truncated_text\n \ \ }\n except Exception as e:\n # 错误处理\n return {\n \ \ \"result\": \"\"\n }" code_language: python3 desc: '' outputs: result: children: null type: string selected: false title: 代码执行 type: code variables: - value_selector: - '1735807758092' - text variable: articleSections height: 54 id: '1735807761855' position: x: 638 y: 258 positionAbsolute: x: 638 y: 258 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: context: enabled: false variable_selector: [] desc: '' model: completion_params: frequency_penalty: 0.5 max_tokens: 4096 temperature: 0.3 mode: chat name: Qwen/Qwen2.5-72B-Instruct-128K provider: siliconflow prompt_template: - id: b6913d40-d173-45d8-b012-98240d42a196 role: system text: '【角色】 你是一位 LLM 大语言模型科学家,参考用户提供的内容,帮助用户构造符合规范的 Fine-tune(微调)数据 【任务】 - 对于给定的「内容」,你每次回列出 10 个通俗「问题」; - 针对每个「问题」,引用「内容」原文及对内容的合理解释和演绎,做出「解答」; - 并将「问题」「解答」整理为规范的 JSONL 格式 【要求】 1. 问题 **不要** 直接引用「内容」,应该贴近当代现实生活; 2. 问题应该是通俗白话,避免“假、大、空“; 3. 答案应忠于原文,对于原文的解释不能脱离原文的主旨、思想; 【输出规范】 * 输出规范的 JSONL,每行一条数据 * 每条数据应包含一个 message 数组,每个数组都应该包含 role 分别为 system、user 和 assistant 的三条记录 * 其中 role 为 system 的数据,作为训练中的 system prompt 格外重要,其 content 使用用户指定的「触发词」 * role 为 user 的数据对应列出的「问题」 * role 为 assistant 的数据则对应针对「问题」的「解答」 * 示例如下: ``` {"messages": [{"role": "system", "content": "你是当代大儒"}, {"role": "user", "content": "应该怎么学习?"}, {"role": "assistant", "content": "贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣。"}]} ```' - id: 61530521-14cf-4eaf-8f06-a4bc89db3cb1 role: user text: '「内容」 {{#1735807761855.result#}} 「触发词」 {{#1735807686274.trigger#}}' selected: false title: LLM type: llm variables: [] vision: enabled: false height: 98 id: '1735807764975' position: x: 942 y: 258 positionAbsolute: x: 942 y: 258 selected: true sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' outputs: - value_selector: - '1735807764975' - text variable: text selected: false title: 结束 type: end height: 90 id: '1735807769820' position: x: 1246 y: 258 positionAbsolute: x: 1246 y: 258 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: author: Dify desc: '' height: 88 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"设置较低的 Temperature,提高输出格式的稳定性","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 88 id: '1735808753316' position: x: 951.4285714285714 y: 375.7142857142857 positionAbsolute: x: 951.4285714285714 y: 375.7142857142857 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: Dify desc: '' height: 88 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"合并多个文档内容,并截取前 8W 字符","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 88 id: '1735808799815' position: x: 640 y: 338.5714285714286 positionAbsolute: x: 640 y: 338.5714285714286 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 viewport: x: 0 y: 0 zoom: 0.7
Outre l'utilisation d'outils tels que Dify, l'utilisation directe de modèles tels que Qwen/Qwen2.5-Coder-32B-Instruct pour aider à l'écriture de scripts à exécuter est également un moyen efficace de construire des données affinées et de contourner plusieurs limitations des plateformes tripartites, en exploitant pleinement les avantages de la plateforme SiliconCloud en matière de raisonnement efficace et riche en modèles, et en récoltant davantage de corpus de données de haute qualité. de haute qualité.
Perfectionnement de la formation et de la validation
Créez une nouvelle tâche de réglage fin sur la plateforme SiliconCloud, téléchargez et sélectionnez le fichier .jsonl que vous venez d'enregistrer et cliquez sur Start Fine-Tuning. Attendez que la tâche de mise au point termine la file d'attente et, une fois l'exécution terminée, vous pouvez utiliser le modèle mis au point ou valider les résultats par le biais d'une expérience en ligne ou d'une API.
La fonction de comparaison de l'expérience en ligne du modèle de dialogue vous permet également de comparer les réponses et les résultats du modèle à travers plusieurs points de contrôle et modèles de base, en choisissant le modèle qui fonctionne le mieux pour continuer à l'utiliser. Modèle d'ajustement vs. modèle de base :
Comparaison entre plusieurs points de contrôle :
A ce stade, nous avons utilisé des fichiers locaux pour construire des données LLM affinées et affiné un LLM Fire Expert. Bien sûr, avec les étapes ci-dessus, vous pouvez également essayer de construire votre propre LLM spécifique à un domaine.
© déclaration de droits d'auteur
Article copyright Cercle de partage de l'IA Tous, prière de ne pas reproduire sans autorisation.
Articles connexes
Pas de commentaires...