当前位置: 首页 > article >正文

从零到精通:手把手教你训练自己的ChatGPT大模型(附完整代码)

本文将带你深入了解ChatGPT背后的原理并手把手教你如何从数据搜集、清洗、预处理到模型训练、推理和部署完成一个属于自己的大语言模型。文章涵盖了数据搜集与清洗、数据预处理与Tokenization、Transformer架构原理、模型训练实战、推理与部署等关键步骤并提供了完整的代码示例和训练技巧适合有一定Python基础和深度学习概念的读者参考。想要理解 ChatGPT 背后的原理想亲手训练一个属于自己的大模型这篇指南将带你走完从数据搜集到模型部署的完整流程。 前言ChatGPT、Claude、Kimi……这些大语言模型LLM正在改变我们的工作方式。但你有没有想过如果我想自己训练一个类似的大模型该怎么做本文将从零开始手把手教你完成✅ 数据搜集与清洗✅ 数据预处理与 Tokenization✅ Transformer 架构原理✅ 模型训练实战✅ 推理与部署阅读难度⭐⭐⭐⭐需要 Python 基础和深度学习概念预计学习时间2-3 周实践 第一章数据搜集——模型的食粮大语言模型的能力很大程度上取决于训练数据的质量。优质的数据是模型成功的基石。1.1 数据来源开源数据集推荐入门数据集规模特点适用场景Common CrawlPB 级网页爬取数据原始但量大预训练基础语料C4800GB清洗后的 Common Crawl高质量预训练The Pile800GB多领域学术代码书籍通用大模型训练WikiText100MB维基百科高质量文本小规模实验OpenWebText38GBReddit 点赞链接的网页GPT-2 复现CodeParrot50GBGitHub 代码数据代码能力训练WuDaoCorpora3TB中文多模态数据集中文大模型自行搜集数据# 示例使用 requests 爬取网页数据import requestsfrom bs4 import BeautifulSoupdefcrawl_article(url): 爬取单篇文章 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.0 } response requests.get(url, headersheaders) soup BeautifulSoup(response.content, html.parser) # 提取正文根据网站结构调整选择器 content soup.find(article) or soup.find(div, class_content) return content.get_text() if content else# 批量爬取示例urls [https://example.com/article1, https://example.com/article2]for url in urls: text crawl_article(url) # 保存到文件...1.2 数据清洗原始数据含有大量噪声必须清洗import redefclean_text(text): 文本清洗流程 # 1. 去除 HTML 标签 text re.sub(r[^], , text) # 2. 去除多余空白 text re.sub(r\s, , text) # 3. 去除特殊字符保留基本标点 text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\s\.\,\!\?\;\:\\\-\(\)], , text) # 4. 去除过短文本少于 50 字符 iflen(text) 50: returnNone # 5. 去除重复段落 lines text.split(\n) unique_lines list(dict.fromkeys(lines)) # 去重同时保持顺序 text \n.join(unique_lines) return text.strip()1.3 数据去重大规模数据去重使用MinHash LSH算法from datasketch import MinHash, MinHashLSHdefdeduplicate_documents(documents, threshold0.8): 文档去重 lsh MinHashLSH(thresholdthreshold, num_perm128) unique_docs [] for doc_id, text inenumerate(documents): m MinHash(num_perm128) # 将文本分词后建立签名 for word in text.split(): m.update(word.encode(utf8)) # 检查是否已存在相似文档 ifnot lsh.query(m): lsh.insert(doc_id, m) unique_docs.append(text) return unique_docs 第二章数据预处理与 Tokenization2.1 什么是 TokenizationTokenization是将文本切分成模型能理解的词片tokens的过程。示例输入: Hello world!输出: [Hello, world, !]对应 ID: [15496, 995, 0]2.2 主流 Tokenizer 对比算法代表特点BPEGPT-2/3/4字节对编码合并最频繁的字符对WordPieceBERT从字符开始逐步合并UnigramT5/XLM从大量子词开始逐步剪枝SentencePieceLLaMA/Alpaca语言无关直接处理原始文本2.3 训练自己的 Tokenizer使用 Hugging Facetokenizers库from tokenizers import Tokenizer, models, trainers, pre_tokenizers# 1. 初始化 BPE 模型tokenizer Tokenizer(models.BPE())# 2. 设置预分词器按空格和标点分割tokenizer.pre_tokenizer pre_tokenizers.Whitespace()# 3. 配置训练器trainer trainers.BpeTrainer( vocab_size32000, # 词表大小常见32K-100K min_frequency2, # 最小词频 special_tokens[pad, unk, s, /s])# 4. 训练从文件files [train_data_1.txt, train_data_2.txt]tokenizer.train(files, trainer)# 5. 保存tokenizer.save(my_tokenizer.json)2.4 数据编码示例# 加载训练好的 tokenizerfrom tokenizers import Tokenizertokenizer Tokenizer.from_file(my_tokenizer.json)# 编码文本encoding tokenizer.encode(Hello, 世界!)print(fTokens: {encoding.tokens})print(fIDs: {encoding.ids})# 解码回文本decoded tokenizer.decode(encoding.ids)print(fDecoded: {decoded})️ 第三章Transformer 架构深度解析2017 年 Google 发表的《Attention Is All You Need》论文提出了 Transformer 架构彻底改变了 NLP 领域。3.1 Transformer 整体架构┌─────────────────────────────────────────┐│ 输入 Embedding ││ 位置编码 (Positional) │└──────────────────┬──────────────────────┘ ▼┌─────────────────────────────────────────┐│ ┌─────────┐ ┌─────────┐ ┌─────┐ ││ │ 多头注意力 │ → │ 前馈网络 │ → │ Layer │ │ × N 层│ │ (MHSA) │ │ (FFN) │ │ Norm │ ││ └─────────┘ └─────────┘ └─────┘ │└─────────────────────────────────────────┘ ▼┌─────────────────────────────────────────┐│ 输出层 (LM Head) │└─────────────────────────────────────────┘3.2 核心组件自注意力机制自注意力Self-Attention是 Transformer 的灵魂让模型能够关注输入序列的不同部分。import torchimport torch.nn as nnimport mathclassSelfAttention(nn.Module): def__init__(self, embed_size, heads): super().__init__() self.embed_size embed_size self.heads heads self.head_dim embed_size // heads # Q, K, V 线性变换 self.values nn.Linear(embed_size, embed_size) self.keys nn.Linear(embed_size, embed_size) self.queries nn.Linear(embed_size, embed_size) self.fc_out nn.Linear(embed_size, embed_size) defforward(self, values, keys, query, maskNone): N query.shape[0] # batch size value_len, key_len, query_len values.shape[1], keys.shape[1], query.shape[1] # 线性变换并 reshape 为多头的形式 values self.values(values).view(N, value_len, self.heads, self.head_dim) keys self.keys(keys).view(N, key_len, self.heads, self.head_dim) queries self.queries(query).view(N, query_len, self.heads, self.head_dim) # 注意力计算: Q K^T / sqrt(d_k) energy torch.einsum(nqhd,nkhd-nhqk, [queries, keys]) if mask isnotNone: energy energy.masked_fill(mask 0, float(-1e20)) attention torch.softmax(energy / math.sqrt(self.head_dim), dim3) # 加权求和: attention V out torch.einsum(nhql,nlhd-nqhd, [attention, values]) out out.reshape(N, query_len, self.embed_size) returnself.fc_out(out)3.3 完整的 Decoder-Only 架构GPT 风格class TransformerBlock(nn.Module): 单个 Transformer 块 def__init__(self, embed_size, heads, dropout, forward_expansion): super().__init__() self.attention SelfAttention(embed_size, heads) self.norm1 nn.LayerNorm(embed_size) self.norm2 nn.LayerNorm(embed_size) self.feed_forward nn.Sequential( nn.Linear(embed_size, forward_expansion * embed_size), nn.GELU(), nn.Linear(forward_expansion * embed_size, embed_size) ) self.dropout nn.Dropout(dropout) defforward(self, value, key, query, mask): attention self.attention(value, key, query, mask) x self.norm1(attention query) # 残差连接 forward self.feed_forward(x) out self.norm2(forward x) returnself.dropout(out)classGPT(nn.Module): GPT 风格的 Decoder-only 模型 def__init__( self, vocab_size, embed_size768, num_layers12, heads12, forward_expansion4, dropout0.1, max_length512 ): super().__init__() self.word_embedding nn.Embedding(vocab_size, embed_size) self.position_embedding nn.Embedding(max_length, embed_size) self.layers nn.ModuleList([ TransformerBlock(embed_size, heads, dropout, forward_expansion) for _ inrange(num_layers) ]) self.fc_out nn.Linear(embed_size, vocab_size) self.dropout nn.Dropout(dropout) defforward(self, x, maskNone): N, seq_length x.shape positions torch.arange(0, seq_length).expand(N, seq_length).to(x.device) out self.dropout( self.word_embedding(x) self.position_embedding(positions) ) for layer inself.layers: out layer(out, out, out, mask) returnself.fc_out(out)3.4 不同规模模型配置参考模型参数量层数注意力头数隐藏维度词表大小GPT-2 Small117M121276850KGPT-2 Medium345M2416102450KGPT-2 Large774M3620128050KGPT-3 Small125M121276850KGPT-3 Medium350M2416102450KGPT-3 Large760M2416153650KLLaMA-7B7B3232409632KLLaMA-13B13B4040512032K 第四章模型训练实战4.1 训练流程概览数据加载 → Tokenization → 构建 DataLoader → 初始化模型 → 训练循环 → 保存检查点4.2 完整训练代码import torchimport torch.nn as nnfrom torch.utils.data import Dataset, DataLoaderfrom tqdm import tqdmclassTextDataset(Dataset): 文本数据集 def__init__(self, texts, tokenizer, max_length512): self.tokenizer tokenizer self.max_length max_length self.data [] for text in texts: encoding tokenizer.encode(text) # 截断或填充到固定长度 ids encoding.ids[:max_length] ids [0] * (max_length - len(ids)) # 填充 self.data.append(ids) def__len__(self): returnlen(self.data) def__getitem__(self, idx): x torch.tensor(self.data[idx][:-1]) # 输入除最后一个 token y torch.tensor(self.data[idx][1:]) # 目标除第一个 token return x, ydeftrain_model( model, dataloader, epochs3, lr3e-4, devicecuda, save_pathmodel.pt): 训练循环 model model.to(device) optimizer torch.optim.AdamW(model.parameters(), lrlr) criterion nn.CrossEntropyLoss() for epoch inrange(epochs): model.train() total_loss 0 progress tqdm(dataloader, descfEpoch {epoch1}/{epochs}) for batch_idx, (x, y) inenumerate(progress): x, y x.to(device), y.to(device) # 前向传播 outputs model(x) loss criterion(outputs.reshape(-1, outputs.size(-1)), y.reshape(-1)) # 反向传播 optimizer.zero_grad() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) # 梯度裁剪 optimizer.step() total_loss loss.item() progress.set_postfix(lossloss.item()) # 定期保存 if batch_idx % 1000 0: torch.save({ epoch: epoch, model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), loss: loss.item(), }, f{save_path}.checkpoint) avg_loss total_loss / len(dataloader) print(fEpoch {epoch1} 平均损失: {avg_loss:.4f}) # 保存最终模型 torch.save(model.state_dict(), save_path) print(f模型已保存到 {save_path})# 使用示例# dataset TextDataset(cleaned_texts, tokenizer)# dataloader DataLoader(dataset, batch_size16, shuffleTrue)# model GPT(vocab_size32000)# train_model(model, dataloader, epochs3)4.3 分布式训练多 GPU对于大模型需要使用分布式训练import torch.distributed as distfrom torch.nn.parallel import DistributedDataParallel as DDPdefsetup_distributed(): 初始化分布式训练 dist.init_process_group(nccl) local_rank int(os.environ[LOCAL_RANK]) torch.cuda.set_device(local_rank) return local_rankdeftrain_distributed(): local_rank setup_distributed() model GPT(vocab_size32000).to(local_rank) model DDP(model, device_ids[local_rank]) # 训练代码... if __name__ __main__: train_distributed()# 启动命令4 卡训练# torchrun --nproc_per_node4 train.py4.4 学习率调度from torch.optim.lr_scheduler import CosineAnnealingLR, LinearLR# 预热 余弦退火scheduler torch.optim.lr_scheduler.SequentialLR( optimizer, schedulers[ LinearLR(optimizer, start_factor0.1, total_iterswarmup_steps), CosineAnnealingLR(optimizer, T_maxtotal_steps - warmup_steps) ], milestones[warmup_steps]) 第五章模型推理与部署5.1 文本生成def generate_text( model, tokenizer, prompt, max_new_tokens100, temperature1.0, top_k50, top_p0.95, devicecuda): 自回归文本生成 model.eval() # 编码输入 input_ids tokenizer.encode(prompt).ids input_tensor torch.tensor([input_ids]).to(device) with torch.no_grad(): for _ inrange(max_new_tokens): # 获取 logits outputs model(input_tensor) logits outputs[:, -1, :] / temperature # Top-k 采样 if top_k 0: indices_to_remove logits torch.topk(logits, top_k)[0][..., -1, None] logits[indices_to_remove] float(-inf) # Top-p (nucleus) 采样 if top_p 1.0: sorted_logits, sorted_indices torch.sort(logits, descendingTrue) cumulative_probs torch.cumsum(torch.softmax(sorted_logits, dim-1), dim-1) sorted_indices_to_remove cumulative_probs top_p sorted_indices_to_remove[..., 1:] sorted_indices_to_remove[..., :-1].clone() sorted_indices_to_remove[..., 0] 0 indices_to_remove sorted_indices_to_remove.scatter(1, sorted_indices, sorted_indices_to_remove) logits[indices_to_remove] float(-inf) # 采样下一个 token probs torch.softmax(logits, dim-1) next_token torch.multinomial(probs, num_samples1) # 追加到序列 input_tensor torch.cat([input_tensor, next_token], dim1) # 检查是否生成结束符 if next_token.item() tokenizer.token_to_id(/s): break # 解码输出 output_ids input_tensor[0].tolist() return tokenizer.decode(output_ids)# 使用示例# generated generate_text(model, tokenizer, 人工智能是, max_new_tokens50)# print(generated)5.2 模型导出与量化# 导出为 ONNX便于跨平台部署torch.onnx.export( model, dummy_input, model.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch_size, 1: sequence}})# 使用 bitsandbytes 进行 8-bit 量化减少显存占用import bitsandbytes as bnbmodel_8bit model.to(cuda).to(torch.float16)for module in model_8bit.modules(): ifisinstance(module, nn.Linear): module.weight bnb.nn.Int8Params(module.weight, requires_gradFalse)5.3 使用 Hugging Face Transformers 加载from transformers import GPT2LMHeadModel, GPT2Tokenizer, GPT2Config# 保存为 Hugging Face 格式defsave_hf_format(model, tokenizer, save_directory): 转换为 Hugging Face 格式并保存 config GPT2Config( vocab_sizelen(tokenizer.get_vocab()), n_positions512, n_embd768, n_layer12, n_head12 ) hf_model GPT2LMHeadModel(config) # 复制权重... hf_model.save_pretrained(save_directory) tokenizer.save_pretrained(save_directory)# 加载并推理model GPT2LMHeadModel.from_pretrained(./my_model)tokenizer GPT2Tokenizer.from_pretrained(./my_model) 第六章训练技巧与最佳实践6.1 显存优化技巧技术显存节省说明Gradient Checkpointing~70%时间换空间重计算激活值Mixed Precision~50%FP16/BF16 训练DeepSpeed ZeRO90%分布式优化器状态Activation Checkpointing~50%选择性存储激活值# Gradient Checkpointingmodel.gradient_checkpointing_enable()# Mixed Precisionfrom torch.cuda.amp import autocast, GradScalerscaler GradScaler()with autocast(): outputs model(inputs) loss criterion(outputs, targets)scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()6.2 超参数调优学习率: 1e-4 ~ 5e-4 warmup 到峰值后余弦衰减Batch Size: 尽可能大1M-4M tokens 全局 batch序列长度: 512-2048视任务而定Dropout: 0.0-0.1大模型通常不用权重衰减: 0.01-0.16.3 推荐的训练框架框架特点适用场景Hugging Face Transformers生态完善易上手研究、实验DeepSpeed微软开源支持 ZeRO大规模训练Megatron-LMNVIDIA 出品性能强超大规模模型Colossal-AI国产统一并行中文社区友好vLLM推理优化高吞吐部署 学习资源推荐必读论文Attention Is All You Need(Transformer 开山之作)Language Models are Few-Shot Learners(GPT-3)LLaMA: Open and Efficient Foundation Language ModelsScaling Laws for Neural Language Models优质课程Stanford CS224N: NLP with Deep LearningStanford CS324: Large Language Models李宏毅机器学习 (B站)开源项目nanoGPT[1] - Andrej Karpathy 的极简 GPT 实现minGPT[2] - 教学用 PyTorch GPTLLaMA-Factory[3] - 大模型训练一站式框架axolotl[4] - YAML 配置训练 总结训练一个大语言模型涉及以下关键步骤数据准备→ 搜集、清洗、去重Tokenization→ 训练 tokenizer编码数据模型设计→ Transformer Decoder 架构训练→ 分布式训练学习率调度推理→ 文本生成模型部署入门建议先从小规模实验开始1亿参数以内使用开源数据集和预训练 tokenizer复现 nanoGPT 或 minGPT 作为起点逐步扩展到更大规模训练大模型是一个系统工程需要算力、数据和经验的积累。希望这篇指南能帮你迈出第一步最近两年大模型发展很迅速在理论研究方面得到很大的拓展基础模型的能力也取得重大突破大模型现在正在积极探索落地的方向如果与各行各业结合起来是未来落地的一个重大研究方向大模型应用工程师年包50w属于中等水平如果想要入门大模型那现在正是最佳时机2025年Agent的元年2026年将会百花齐放相应的应用将覆盖文本视频语音图像等全模态如果你对AI大模型入门感兴趣那么你需要的话可以点击这里大模型重磅福利入门进阶全套104G学习资源包免费分享扫描下方csdn官方合作二维码获取哦给大家推荐一个大模型应用学习路线这个学习路线的具体内容如下第一节提示词工程提示词是用于与AI模型沟通交流的这一部分主要介绍基本概念和相应的实践高级的提示词工程来实现模型最佳效果以现实案例为基础进行案例讲解在企业中除了微调之外最喜欢的就是用提示词工程技术来实现模型性能的提升第二节检索增强生成RAG可能大家经常会看见RAG这个名词这个就是将向量数据库与大模型结合的技术通过外部知识来增强改进提升大模型的回答结果这一部分主要介绍RAG架构与组件从零开始搭建RAG系统生成部署RAG性能优化等第三节微调预训练之后的模型想要在具体任务上进行适配那就需要通过微调来提升模型的性能能满足定制化的需求这一部分主要介绍微调的基础模型适配技术最佳实践的案例以及资源优化等内容第四节模型部署想要把预训练或者微调之后的模型应用于生产实践那就需要部署模型部署分为云端部署和本地部署部署的过程中需要考虑硬件支持服务器性能以及对性能进行优化使用过程中的监控维护等第五节人工智能系统和项目这一部分主要介绍自主人工智能系统包括代理框架决策框架多智能体系统以及实际应用然后通过实践项目应用前面学习到的知识包括端到端的实现行业相关情景等学完上面的大模型应用技术就可以去做一些开源的项目大模型领域现在非常注重项目的落地后续可以学习一些Agent框架等内容上面的资料做了一些整理有需要的同学可以下方添加二维码获取仅供学习使用

相关文章:

从零到精通:手把手教你训练自己的ChatGPT大模型(附完整代码)

本文将带你深入了解ChatGPT背后的原理,并手把手教你如何从数据搜集、清洗、预处理到模型训练、推理和部署,完成一个属于自己的大语言模型。文章涵盖了数据搜集与清洗、数据预处理与Tokenization、Transformer架构原理、模型训练实战、推理与部署等关键步…...

OpenClaw+nanobot日程管理:自然语言输入转日历事件

OpenClawnanobot日程管理:自然语言输入转日历事件 1. 为什么需要自然语言日程管理 作为一个经常被各种会议和截止日期追着跑的技术从业者,我一直在寻找更高效的日程管理方式。传统的日历应用需要手动填写时间、地点、标题等字段,操作繁琐且…...

LabelImg图像标注工具:从零开始创建AI训练数据的完整指南

LabelImg图像标注工具:从零开始创建AI训练数据的完整指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out…...

深度技术解析:Netgear路由器隐藏Telnet控制台的终极解锁方案

深度技术解析:Netgear路由器隐藏Telnet控制台的终极解锁方案 【免费下载链接】netgear_telnet Netgear Enable Telnet (New Crypto) 项目地址: https://gitcode.com/gh_mirrors/ne/netgear_telnet Netgear路由器隐藏Telnet控制台解锁工具是一个专为网络安全研…...

**用Python打造高保真语音合成系统:从原理到实战部署**在人工智能飞速发展的今天,语音合成(TTS,Text-to-Speech

用Python打造高保真语音合成系统:从原理到实战部署 在人工智能飞速发展的今天,语音合成(TTS, Text-to-Speech)已不再是实验室里的“玩具”,而是广泛应用于智能客服、有声读物、无障碍交互等多个场景的核心技术。本文将…...

若依前后端分离系统在Linux生产环境的高效部署指南

1. 环境准备与依赖安装 在Linux生产环境部署若依前后端分离系统前,需要确保服务器具备完整的运行环境。我遇到过不少部署失败案例,90%都是因为基础环境配置不完整导致的。下面这些组件缺一不可: JDK 1.8:若依系统基于Java开发&am…...

SDMatte代码解读:关键模块架构分析与核心算法实现

SDMatte代码解读:关键模块架构分析与核心算法实现 1. 项目背景与核心价值 SDMatte是一个开源的图像抠图工具,基于深度学习技术实现高质量的自动背景分离。相比传统方法,它能够更准确地处理复杂边缘(如头发、透明材质等&#xff…...

小程序原生组件层级穿透实战:cover-view与canvas的深度优化

1. 为什么需要cover-view与canvas层级穿透 在小程序开发中,原生组件的层级问题一直是让开发者头疼的难题。特别是当我们需要在canvas、video等原生组件上叠加按钮、文字提示时,普通的view组件根本无法实现预期效果。这是因为小程序的原生组件采用了特殊的…...

Millennium Steam Patcher架构解析:模块化主题引擎与Hook系统的深度实现

Millennium Steam Patcher架构解析:模块化主题引擎与Hook系统的深度实现 【免费下载链接】millennium-steam-patcher Apply themes/customize Steam after the 2023-04-27 Chromium UI update https://discord.gg/MXMWEQKgJF 项目地址: https://gitcode.com/gh_mi…...

信号完整性工程师必看:S参数实战解析与常见误区(附VNA实测案例)

信号完整性工程师必看:S参数实战解析与常见误区(附VNA实测案例) 在高速数字电路设计中,信号完整性(SI)问题往往成为工程师的"隐形杀手"。随着信号速率突破10Gbps,PCB走线不再只是简单…...

旧Mac升级终极指南:用OpenCore Legacy Patcher解锁新系统完整方案

旧Mac升级终极指南:用OpenCore Legacy Patcher解锁新系统完整方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当你的老款Mac提示"此设备不支持最新ma…...

VisionPro多模板匹配实战:CogPMAlignMultiTool从入门到精通(附完整代码)

VisionPro多模板匹配实战:CogPMAlignMultiTool从入门到精通 在工业视觉检测领域,多模板匹配技术正成为复杂场景下的关键解决方案。当单一模板无法覆盖产品多变的形态时,CogPMAlignMultiTool展现出强大的适应性。本文将带您深入掌握这一工具的…...

手把手教你用STM32H7S7实现高速USB复合设备(CDC+MSC):从CubeMX配置到性能优化

STM32H7高速USB复合设备开发实战:CDCMSC架构设计与性能调优 在嵌入式系统开发中,USB复合设备技术正成为连接智能硬件与主机系统的关键桥梁。STM32H7系列凭借其Cortex-M7内核和480Mbps的高速USB外设,为开发者提供了实现高性能复合设备的理想平…...

FPGA篇---Vivado 与 Vitis 的区别详解

Vivado 和 Vitis 是 AMD(原 Xilinx)推出的两款核心开发工具,分别针对 硬件设计 和 软件/系统级开发。两者既有明确分工,又在现代设计流程中深度融合。1. 核心定位差异维度VivadoVitis全称Vivado Design SuiteVitis Unified Softwa…...

阿里小云KWS模型在STM32平台上的轻量化部署

阿里小云KWS模型在STM32平台上的轻量化部署 1. 为什么要在STM32上跑语音唤醒 很多开发者第一次听说要在STM32这种资源受限的微控制器上部署语音唤醒模型时,第一反应往往是:这可能吗?毕竟STM32通常只有几百KB的Flash和几十KB的RAM&#xff0…...

Conda镜像源配置的3个高级玩法与1个常见大坑:不止是换URL那么简单

Conda镜像源配置的3个高级玩法与1个常见大坑:不止是换URL那么简单 当你在团队协作中遇到TensorFlow版本冲突,或是Docker构建时因网络问题卡在Solving environment步骤,基础镜像源切换早已不够用。真正的高手会在.condarc里埋下这些彩蛋&#…...

从提示词到成图:雯雯的后宫-造相Z-Image-瑜伽女孩真实案例分享(含新月式示例)

从提示词到成图:雯雯的后宫-造相Z-Image-瑜伽女孩真实案例分享(含新月式示例) 想用AI生成一张完美的瑜伽女孩图片,却总是被“AI手”、“奇怪姿势”和“塑料感”劝退?别急,今天我们就来手把手拆解一个真实案…...

GLM-4V-9B Streamlit交互设计解析:侧边栏上传+实时渲染+历史回溯实现

GLM-4V-9B Streamlit交互设计解析:侧边栏上传实时渲染历史回溯实现 1. 引言 你有没有遇到过这样的情况:拿到一个功能强大的AI模型,官方给的示例代码却在自己的电脑上跑不起来,要么是显存不够,要么是各种奇怪的报错&a…...

MOOTDX零代码金融数据解决方案:3个核心价值点解锁股票数据可视化分析

MOOTDX零代码金融数据解决方案:3个核心价值点解锁股票数据可视化分析 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 一、价值定位:为什么MOOTDX是金融数据获取的最优解 打…...

如何让2008-2017年的老款Mac重获新生?OpenCore Legacy Patcher终极指南

如何让2008-2017年的老款Mac重获新生?OpenCore Legacy Patcher终极指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为手中的老款Mac无法安装最新macOS…...

TradingAgents-CN:5分钟搭建你的AI投资智囊团,让普通人也能拥有专业金融分析能力

TradingAgents-CN:5分钟搭建你的AI投资智囊团,让普通人也能拥有专业金融分析能力 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-…...

路径规划算法大对决:A星、改进A星与新A星

A星 改进A星 新A星算法 路径规划 放在一张图上 对比 三天对比线在一张图 避障在路径规划领域,A星算法就像一位老将,一直以来都备受瞩目。而随着研究的深入,改进A星和新A星算法也相继登场,今天咱们就把这几位“选手”放在一…...

Clawdbot汉化版开源可部署:MIT协议+全栈TypeScript+模块化Agent设计解析

Clawdbot汉化版开源可部署:MIT协议全栈TypeScript模块化Agent设计解析 1. 项目概述与技术特色 Clawdbot是一个开源的智能对话助手系统,采用MIT协议发布,允许用户自由使用、修改和分发。这个项目的核心价值在于让用户能够在主流即时通讯平台…...

OpenClaw性能对比:GLM-4.7-Flash与其他模型实测数据

OpenClaw性能对比:GLM-4.7-Flash与其他模型实测数据 1. 测试背景与实验设计 最近在优化个人自动化工作流时,我注意到OpenClaw对不同大模型的表现差异显著。特别是当任务链较长时,模型响应速度和稳定性直接影响最终效果。本次测试聚焦于GLM-…...

Czkawka:用Rust构建的跨平台重复文件清理完整解决方案

Czkawka:用Rust构建的跨平台重复文件清理完整解决方案 【免费下载链接】czkawka 一款跨平台的重复文件查找工具,可用于清理硬盘中的重复文件、相似图片、零字节文件等。它以高效、易用为特点,帮助用户释放存储空间。 项目地址: https://git…...

OpenClaw安全防护指南:GLM-4.7-Flash执行权限管控实践

OpenClaw安全防护指南:GLM-4.7-Flash执行权限管控实践 1. 为什么需要安全防护? 上周我在调试OpenClaw自动化脚本时,差点酿成大祸。当时想让GLM-4.7-Flash模型帮我整理下载目录里的PDF文件,结果模型误解了指令,竟然试…...

告别配置噩梦:OpCore-Simplify让黑苹果EFI构建效率提升90%

告别配置噩梦:OpCore-Simplify让黑苹果EFI构建效率提升90% 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 黑苹果配置一直是许多技术爱好者…...

Step3-VL-10B在STM32嵌入式开发中的应用:图像识别实战

Step3-VL-10B在STM32嵌入式开发中的应用:图像识别实战 如何在资源受限的嵌入式设备上实现高质量的图像识别?本文通过Step3-VL-10B模型在STM32上的实战应用,为你揭示轻量级视觉模型的部署奥秘。 1. 为什么选择Step3-VL-10B用于STM32开发 STM3…...

ComfyUI-KJNodes:重构AI创作工作流的效率革命

ComfyUI-KJNodes:重构AI创作工作流的效率革命 【免费下载链接】ComfyUI-KJNodes Various custom nodes for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-KJNodes 一、挑战引入:当AI创作遇上效率瓶颈 在AI图像创作领域&#xf…...

Qwen3-0.6B-FP8助力Python爬虫数据智能分析与摘要生成

Qwen3-0.6B-FP8助力Python爬虫数据智能分析与摘要生成 1. 引言 你有没有过这样的经历?用Python爬虫吭哧吭哧抓了一大堆网页数据,看着满屏的HTML标签和杂乱无章的文本,瞬间头大。接下来还得手动筛选、整理、总结,工作量巨大不说&…...