大模型微调硬件入门
先说结论:个人第一次学习微调,优先选择 7B 模型 + 4bit QLoRA。8~12GB 显存更适合入门;24GB 显存可以进一步尝试 16bit LoRA 或更大的模型。 微调为什么需要显卡大模型已经通过大量数据学会了通用知识。微调(Fine-tuning) 是在现有模型上继续训练,让它更适合某个任务。例如,用客服问答数据训练通用模型,让它学会特定的回答方式。 可以把大模型理解为已经毕业的学生,微调就是入职后的岗位培训。 阶段 含义 硬件开销 预训练 从零训练一个模型 最高,通常需要大规模集群 微调 对现有模型进行专项训练 居中,个人可以使用 LoRA 或 QLoRA 推理 只让模型回答问题,不更新参数 最低 本文讨论的是微调。能运行一个模型,不代表能微调它,因为训练还要保存许多中间数据。 决定显存的四个因素1. 模型参数量参数(Parameter) 是模型学习到的大量数字,可以理解为模型积累的“经验值”。权重(Weight) 是最常见的一类参数,入门阶段可以先把二者看成一回事。 B 是 Billion(十亿)的缩写: 7B:约 70 亿参数 1...
Python 精讲
环境与运行1234567python --versionpython -c "import sys; print(sys.executable)"python # REPLpython hello.py # 运行脚本python -m package.cli # 运行模块python -c "print(2 ** 10)" 每个项目使用独立环境: 1234567891011python -m venv .venv# macOS / Linuxsource .venv/bin/activate# Windows PowerShell.venv\Scripts\Activate.ps1python -m pip install requestspython -m pip listdeactivate 使用 uv: 123456uv init democd demouv python pin 3.14uv add httpxuv add --dev pytest ruff ...
MCP到底是什么?
前言在今天的数字化时代,软件开发和数据科学正以飞快的速度前进。随着机器学习模型变得越来越高级,它们和运行环境之间的“对话”也变得尤为重要。这时候,MCP(模型上下文协议)就像是一位新晋的调解员,提出了一套既标准又高效的方案,来帮助模型和它们的运行环境更好地“沟通”,同时也确保了沟通的安全性。 什么是 MCP?MCP,即模型上下文协议,是一种定义和管理模型与其运行环境交互的协议。它不仅仅是一个技术规范,更像是一座桥梁,连接着模型与现实世界的运行环境。通过 MCP,我们可以更加轻松地在不同的平台和环境中部署和使用模型,同时确保数据的安全性和一致性。 MCP 的魅力所在 模型定义的标准化:MCP 提供了一套标准化的模型定义格式,这意味着无论模型是在哪个平台上开发的,都可以被一致地理解和使用,大大提高了模型的互操作性。 上下文管理的精细化:通过 MCP,我们可以精确地定义模型运行所需的上下文信息,包括数据的输入输出格式、依赖的库等,这不仅简化了模型的部署过程,也确保了模型在不同环境中运行时的一致性。 安全性与隐私保护:在数据传输和使用过程中,MCP 通过内置的加密和访问控制机制,为模...
【工作日常】如何统计代码行数?
刚接手了一个项目,老板让我统计一下代码行数,不看不知道,一看吓一跳,一起看看你写了多少代码吧。 Node Version: 14.18.1 终端执行node ./line.js 即可。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657// line.jsconst fs = require("fs");const path = require("path");const folderPaths = [path.resolve("./", "src")];const excludes = [ "nide_modules", "demo", "static", "docs", "__mocks__", "dist",...
【规范建设】如何做好代码评审?
状态合并看一下如下代码,不知道大家会有什么感想? 12345678910import React, { useState } from "react";const Demo = () => { const [state1, setState1] = React.useState(""); const [state2, setState2] = React.useState(""); const [state3, setState3] = React.useState(""); // 4,5,6,7.... return <div>xxx</div>;}; 函数组件通过 useState 更新状态,这就会出现一个组件内出现大量 useState,看上去很不爽,但又没什么毛病。 是否可以像类组件一样,通过 setState 维护多个状态呢? 当然,我们改造一下。 1234567891011121314151617import...
【规范建设】什么是code review?
简介关于代码评审(Code Review),代码评审也已经是许多组织的标准化实践。在许多团队在尝试代码评审实践时,却有如下的疑问:代码评审活动究竟有没有达到期望的实际效果? 给了我一大堆代码,到底该从哪里看起?哪些方面是我该评审的?哪些不是? 别人有没有认真评审我的代码?如何让别人更容易的评审代码? 理解代码评审的核心目标,建立关于代码评审的正确预期。 了解代码评审为什么可能无效,并采取有针对性的实践来提升代码评审的效果。 为什么要做代码评审不少同学认为代码评审就是用来查错的,甚至希望用代码的缺陷数量来检验代码评审的效果。这低估了代码评审的价值。代码评审最本质的作用不是问题发现。除了代码评审,我们有更多更好的手段来发现问题。代码评审的作用更多是关于社会学的,是一种长期行为和组织文化。 CR 是代码规范性的保证编码者视角:良性的社交压力你正在紧张的编码,交付时间迫在眉睫。你的组织对代码的单元测试有一个要求:凡是新增的代码,必须有完整的自动化单元测试。但是,这压力之下,你想给自己降低一点要求,不写这部分待的单元测试了,以后再编写吧,或者为了应付工具的覆盖率要求,先写一点不那么有用...
【规范建设】git commit 规范化指南
前言 目的规范化团队的代码提交管理,方便与明确知道提交记录的目的。 便于程序员对提交历史进行追溯,了解发生了什么情况。 一旦约束了 commit message,意味着我们将慎重的进行每一次提交,不能再一股脑的把各种各样的改动都放在一个 git commit 里面,这样一来整个代码改动的历史也将更加清晰。 格式化的 commit message 才可以用于自动化输出 Change log。 提交预览提交格式参数说明(type)参数说明(scope)参数说明(subject)示例 <类型>[可选 范围]: <描述> 1<type>(<scope>): <subject> 参数说明: 123456789scope(可选) scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。 例如在Angular,可以是location, browser, compile, compile, rootScope, ngHref, ngClick, ngView等。如果你的修改影...
【工作日常】Git如何解决代码冲突
前言 下文分支命名不规范,太山寨,忽略就好,因为不是重点。 很抗拒写这类文章,感觉这是作为开发最基本的技能要求,但现实狠狠的打了我的脸,很多同学并不知道怎么解决冲突,甚至不知道为什么会有冲突? 冲突从何来? 不会画图,看文字描述吧 正常的项目开发我们不会直接基于主干(master)开发,而是基于 master checkout 出我们自己的迭代分支 dev,然后大家基于 dev 分支再次切出自己的开发分支,例如 A 同学基于 dev 分支切出了 a 分支 , B 同学基于 dev 分支切出了 b 分支,然后大家一起愉快的进行代码开发。 但不巧的是,A 和 B 修改了相同的文件(index.ts) branch: a 123/** 开发分支 */export const NAME = "柯南";复制代码; branch: b 1234/** 开发分支 */export const NAME = "小敏";export const AGE = 18;复制代码; 由于 A 效率比较高,先将代码提 PR 合并到 dev 分支上了,当 B 去...
【基础积累】包管理工具(pnpm)
简介pnpm (opens new window)含义为 performant npm 意指『高性能的 npm』,与 npm 一样的都是软件包管理工具。pnpm 比其他包管理器快 2 倍 国内源设置国内源可以软件下载速度,使用 nrm 命令可以快速设置国内源。 nrmnrm 命令可以方便的设置镜像,首先安装命令。如果安装不成功,可以先按上面步骤将 npm 手动设置为淘宝源。 1npm install -g nrm 常用命令镜像列表 1nrm ls 结果如下 123456npm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/tencent ------ https://mirrors.cloud.tencent.com/npm/cnpm --------- https://r.cnpmjs.org/taobao ------- https://registry.npmmirror.com/npmMirror ---- https://skimdb.npmjs.c...
三、TypeScript 基础类型
类型定义1.1 Boolean(布尔类型) 1const flag: boolean = true; 1.2 Number(数值型) 1const num: number = 1; 1.3 String(字符型) 1const str: number = "hello"; 1.4 Undefined(未定义) undefined 和 null 两者有各自的类型分别为 undefined 和 null 12let u: undefined = undefined;u = null; 1.5 Null(空值) undefined 和 null 两者有各自的类型分别为 undefined 和 null 12const n: null = null;n = undefined; 1.6 Symbol(唯一值) 我们在使用 Symbol 的时候,必须添加 es6 的编译辅助库 需要在 tsconfig.json 的 libs 字段加上 ES2015 Symbol 的值是唯一不变的 1234const sym1 = Symbol("hello"...
