C语言写的LLM训练

特斯拉前 AI 总监、OpenAI 创始团队成员 Andrej Karpathy 用 C 代码完成了 GPT-2 大模型训练过程:karpathy/llm.c: LLM training in simple, raw C/CUDA (github.com)

下载源码

git clone --recursive https://github.com/karpathy/llm.c.git

下载模型

从HF-Mirror - Huggingface 镜像站下载gpt2模型:

cd llm.c
./hfd.sh openai-community/gpt2 --tool aria2c -x 4

用CPU训练gpt2大模型

pip install -r requirements.txt
python prepro_tinyshakespeare.py
python train_gpt2.py
make train_gpt2
OMP_NUM_THREADS=16 ./train_gpt2

训练结果:

[GPT-2]
max_seq_len: 1024
vocab_size: 50257
padded_vocab_size: 50304
num_layers: 12
num_heads: 12
channels: 768
num_parameters: 124475904
train dataset num_batches: 1192
val dataset num_batches: 128
num_activations: 73347840
val loss 5.325522
step 0: train loss 5.356185 (took 2897.148828 ms)
step 1: train loss 4.301033 (took 2498.365030 ms)
step 2: train loss 4.623316 (took 2358.455841 ms)
step 3: train loss 4.600415 (took 2643.469682 ms)
step 4: train loss 4.616777 (took 2498.933979 ms)
step 5: train loss 4.231482 (took 2356.468469 ms)
step 6: train loss 3.754166 (took 2782.597088 ms)
step 7: train loss 3.652230 (took 2379.824868 ms)
step 8: train loss 4.183515 (took 2408.840079 ms)
step 9: train loss 4.199315 (took 2811.563323 ms)
val loss 4.323445
step 10: train loss 4.288396 (took 2652.485471 ms)
step 11: train loss 3.558984 (took 2501.367965 ms)
step 12: train loss 3.730804 (took 2415.376200 ms)
step 13: train loss 4.159164 (took 2824.504369 ms)
step 14: train loss 3.886458 (took 2460.975123 ms)
step 15: train loss 3.764933 (took 2421.700741 ms)
step 16: train loss 4.143034 (took 2794.475716 ms)
step 17: train loss 3.962718 (took 2374.036900 ms)
step 18: train loss 3.796120 (took 2430.497860 ms)
step 19: train loss 3.371638 (took 2699.907792 ms)
val loss 4.186637
generating:
---
I was so exceptionally drunk:
You would spake for seen'st
Threaten beyond you, 'twas so far too?

<|endoftext|>STRUCTINIUS:
Scheduled since 1539 is
Welcome to Rome:
We meet the indignation of lesser nations' countenance? thank me
---
step 20: train loss 3.880942 (took 2673.638517 ms)
step 21: train loss 4.198619 (took 2409.159397 ms)
step 22: train loss 4.426098 (took 2381.811139 ms)
step 23: train loss 3.685762 (took 2630.524207 ms)
step 24: train loss 3.642307 (took 2409.535371 ms)
step 25: train loss 3.729648 (took 2419.172362 ms)
step 26: train loss 3.549645 (took 2615.432226 ms)
step 27: train loss 3.339360 (took 2397.100638 ms)
step 28: train loss 4.338965 (took 2306.472662 ms)
step 29: train loss 3.812843 (took 2489.614175 ms)
val loss 4.020430
step 30: train loss 4.028022 (took 2830.212721 ms)
step 31: train loss 4.114379 (took 2393.216771 ms)
step 32: train loss 3.575101 (took 2411.546749 ms)
step 33: train loss 4.366093 (took 2782.991834 ms)
step 34: train loss 4.516504 (took 2386.624338 ms)
step 35: train loss 4.434158 (took 2362.931890 ms)
step 36: train loss 4.097423 (took 2722.066351 ms)
step 37: train loss 3.739693 (took 2375.078001 ms)
step 38: train loss 4.612139 (took 2440.452340 ms)
step 39: train loss 3.970823 (took 2657.332781 ms)
val loss 4.016672
generating:
---
Come Kurultan,
Among the geopolitical
Coers and My scullers take one word.

<|endoftext|>Shutth out of the yacht,
Sone of dejected glories
draw'd like an everlasting flame;
But: prying out, as a look in a good canopy
Fairs with
---
step 40: train loss 4.377796 (took 2752.577323 ms)

测试

make test_gpt2
./test_gpt2

测试结果:

[GPT-2]
max_seq_len: 1024
vocab_size: 50257
padded_vocab_size: 50304
num_layers: 12
num_heads: 12
channels: 768
num_parameters: 124475904
[State]
batch_size: 4
seq_len: 64
num_activations: 73347840
-43.431503, -43.431736
-39.836239, -39.836460
-43.065804, -43.066002
-42.827946, -42.828171
-43.529419, -43.529659
-44.318279, -44.318508
-41.227291, -41.227512
-41.270660, -41.270866
-42.541286, -42.541489
-42.394890, -42.395119
OK (LOGITS), max_diff = 8.239746e-04
LOSS OK: 5.269997 5.270007
dwte
OK -0.002320 -0.002320
OK 0.002072 0.002072
OK 0.003717 0.003717
OK 0.001307 0.001307
OK 0.000632 0.000632
TENSOR OK, maxdiff = 1.707077e-04
dwpe
OK -0.005111 -0.005110
OK -0.000011 -0.000013
OK -0.003262 -0.003261
OK 0.009909 0.009908
OK 0.002146 0.002145
TENSOR OK, maxdiff = 1.203269e-05
dln1w
OK -0.007523 -0.007523
OK 0.008642 0.008644
OK 0.005025 0.005028
OK -0.011094 -0.011094
OK -0.001663 -0.001663
TENSOR OK, maxdiff = 4.264116e-04
dln1b
OK -0.038462 -0.038456
OK -0.030591 -0.030595
OK 0.010215 0.010219
OK 0.080178 0.080175
OK -0.060908 -0.060896
TENSOR OK, maxdiff = 1.597637e-04
dqkvw
OK -0.000031 -0.000031
OK -0.000025 -0.000025
OK -0.000064 -0.000064
OK 0.000074 0.000074
OK 0.000020 0.000020
TENSOR OK, maxdiff = 6.203726e-05
dqkvb
OK -0.000412 -0.000411
OK -0.000412 -0.000412
OK 0.000114 0.000114
OK -0.000565 -0.000565
OK 0.000571 0.000570
TENSOR OK, maxdiff = 3.422704e-05
dattprojw
OK 0.000080 0.000080
OK -0.000005 -0.000005
OK -0.000019 -0.000019
OK 0.000004 0.000004
OK 0.000031 0.000032
TENSOR OK, maxdiff = 2.195314e-05
dattprojb
OK 0.000470 0.000472
OK -0.009979 -0.009981
OK -0.001803 -0.001805
OK 0.037585 0.037572
OK -0.031238 -0.031231
TENSOR OK, maxdiff = 1.956336e-05
dln2w
OK -0.018318 -0.018313
OK 0.004812 0.004812
OK 0.008089 0.008089
OK -0.001469 -0.001470
OK -0.002737 -0.002737
TENSOR OK, maxdiff = 1.060128e-03
dln2b
OK -0.026374 -0.026374
OK -0.016703 -0.016702
OK 0.001072 0.001069
OK 0.034711 0.034700
OK -0.028584 -0.028578
TENSOR OK, maxdiff = 8.928776e-05
dfcw
OK 0.000440 0.000440
OK -0.000000 -0.000000
OK -0.000154 -0.000154
OK -0.000165 -0.000165
OK 0.000405 0.000405
TENSOR OK, maxdiff = 1.000613e-04
dfcb
OK 0.003291 0.003294
OK 0.002043 0.002044
OK -0.001386 -0.001386
OK 0.000386 0.000387
OK 0.001603 0.001603
TENSOR OK, maxdiff = 2.483255e-05
dfcprojw
OK 0.000680 0.000681
OK 0.000073 0.000073
OK -0.000416 -0.000416
OK -0.000060 -0.000061
OK -0.000604 -0.000604
TENSOR OK, maxdiff = 4.865497e-05
dfcprojb
OK 0.003583 0.003585
OK -0.007157 -0.007159
OK -0.001962 -0.001963
OK 0.001462 0.001462
OK 0.001217 0.001218
TENSOR OK, maxdiff = 1.481583e-05
dlnfw
OK -0.000022 -0.000022
OK 0.000810 0.000810
OK 0.001161 0.001161
OK -0.002957 -0.002957
OK 0.001145 0.001145
TENSOR OK, maxdiff = 2.471101e-05
dlnfb
OK -0.011101 -0.011100
OK 0.008009 0.008009
OK -0.004771 -0.004771
OK -0.002112 -0.002112
OK -0.005905 -0.005905
TENSOR OK, maxdiff = 4.455447e-06
step 0: loss 5.269997 (took 2538.900264 ms) OK = 1
step 1: loss 4.059699 (took 2211.700180 ms) OK = 1
step 2: loss 3.375026 (took 2289.109099 ms) OK = 1
step 3: loss 2.800780 (took 2558.251191 ms) OK = 1
step 4: loss 2.315454 (took 2279.104378 ms) OK = 1
step 5: loss 1.849150 (took 2161.919211 ms) OK = 1
step 6: loss 1.394839 (took 2540.158140 ms) OK = 1
step 7: loss 0.999173 (took 2233.801734 ms) OK = 1
step 8: loss 0.624303 (took 2302.283686 ms) OK = 1
step 9: loss 0.376687 (took 2553.011337 ms) OK = 1
overall okay: 1

相关链接

“真男人就应该用 C 编程”!大神用 1000 行 C 代码手搓了一个大模型-电子头条-EEWORLD电子工程世界

llm.c代码详细解读(一) - 知乎 (zhihu.com)

Kimi

训练大型语言模型(LLM)通常是一个复杂的过程,涉及到大量的数据预处理、模型设计、训练和优化。虽然C语言是一种强大的编程语言,但它并不是进行机器学习模型训练的常用语言。大多数深度学习框架,如TensorFlow、PyTorch等,都是用Python等高级语言编写的,因为这些语言提供了更多的抽象和库支持,可以简化模型训练的过程。

然而,如果你希望使用C语言来训练LLM,你可以考虑以下几个方面:

  1. 数学库:你需要一个能够进行复杂数学运算的库,比如BLAS、LAPACK或cuBLAS(如果使用GPU加速)。

  2. 并行计算:由于LLM通常需要大量的计算资源,因此使用并行计算技术(如OpenMP或CUDA)是非常重要的。

  3. 深度学习框架:你可能需要自己实现一个深度学习框架,或者寻找一个用C语言编写的框架。这将涉及到实现前向传播、反向传播、梯度下降等算法。

  4. 数据预处理:你需要能够加载和预处理文本数据,这可能涉及到文本清洗、分词、向量化等步骤。

  5. 模型架构:设计适合LLM的神经网络架构,如Transformer、循环神经网络(RNN)等。

  6. 优化算法:实现或集成梯度下降等优化算法,用于更新神经网络的权重。

  7. 性能分析:使用性能分析工具来优化你的代码,比如gprof或valgrind。

  8. 调试和测试:由于C语言的接近硬件的特性,调试可能会比较复杂,需要仔细设计测试用例。

  9. 内存管理:C语言需要手动管理内存,这在处理大型数据集和模型时可能会变得非常复杂。

  10. 社区和资源:与Python等语言相比,使用C语言进行深度学习开发的社区和资源可能较少,这可能会增加开发难度。

总的来说,使用C语言训练LLM是一个具有挑战性的任务,需要深入的编程知识、数学背景和机器学习经验。如果你是一个初学者或者没有足够的资源,可能需要考虑使用更高级的语言和现成的深度学习框架。

如果你有特定的需求或者想要了解更多关于这个话题的信息,请提供更多的细节,我会尽力帮助你。

找到了第 1 篇资料:OpenAI创始大神手搓千行C代码训练GPT,附PyTorch迁移教程

找到了第 2 篇资料:“真男人就应该用 C 编程”!用 1000 行 C 代码手搓了一个大 ...

找到了第 3 篇资料:OpenAI 创始大神手搓千行 C 代码训练 GPT,附 PyTorch ...

找到了第 4 篇资料:颠覆LLM训练方法!Karpathy仅凭1000行C语言代码、一台 ...

找到了第 5 篇资料:llm.c代码详细解读(一) - 知乎

找到了第 6 篇资料:“真男人就应该用 C 编程”!用 1000 行 C 代码手搓了一个大 ...

找到了第 7 篇资料:颠覆LLM训练方法!Karpathy仅凭1000行C语言代码、一台 ...

找到了第 8 篇资料:探索 Karpathy 的 `llm.c`: 一个轻量级语言模型工具 - CSDN博客

找到了第 9 篇资料:纯C语言手搓GPT-2,前OpenAI、特斯拉高管新项目火了_澎湃 ...

根据提供的搜索结果,Andrej Karpathy,这位特斯拉前AI总监和OpenAI的创始成员,开发了一个名为llm.c的项目,该项目使用纯C语言训练大型语言模型(LLM),如GPT-2。这个项目的特点和步骤可以总结如下:

  1. 项目简介llm.c是一个用C语言编写的简单项目,旨在提供一个低级别的接口来训练大型语言模型。它不需要依赖庞大的库如PyTorch或Python,从而显著减少了依赖库的体积。

  2. 代码量和效率:Karpathy仅用大约1000行简洁的C代码完成了GPT-2模型的训练。这种方法不仅减少了依赖,还能与PyTorch的参考实现相匹配,并且可以立即编译和运行。

  3. 内存管理:在项目的开始阶段,所有需要的内存被一次性分配,训练过程中内存占用保持不变,数据批次在不同批次之间动态流动。

  4. 核心实现:关键在于手动实现每个单独层的前向传播和反向传播,并将它们串联起来。这包括编码器、matmul、自注意力、gelu、残差、softmax和交叉熵损失等。

  5. CUDA移植:Karpathy正在将这些层逐层移植到CUDA上,以提高效率,使其接近PyTorch的性能,同时减少依赖。

  6. 项目优势

    • 代码简洁性:使用更少的代码完成模型训练,降低了复杂度。
    • 独立性:不依赖外部库,使得部署和运行更加轻便快捷。
    • 高效性:直接使用C/CUDA进行编程,提高计算效率和训练速度。
  7. 社区反馈:项目发布后迅速获得社区的积极响应,许多人对使用C语言进行深度学习训练表示出了兴趣。

  8. 开源和教程:Karpathy将llm.c项目开源在GitHub上,并提供了从PyTorch迁移到C语言的教程。

  9. 未来发展:Karpathy计划发布视频进行更详细的讲解,并探索使用SIMD指令加速CPU版本,以及支持更现代的架构如Llama2和Gemma。

  10. 实践指南:项目还提供了快速开始的指南,包括数据集的下载和tokenize,使用预训练权重进行模型初始化,以及如何用原始C语言进行模型训练。

通过这些步骤和特点,我们可以看出llm.c项目是一个创新的尝试,它展示了即使在不使用主流深度学习框架的情况下,也能高效地进行LLM的训练。这对于希望减少依赖、提高性能或者对深度学习底层实现感兴趣的开发者来说,是一个宝贵的资源。

ChatGPT

用C语言编写一个大型语言模型(LLM)如GPT-3或BERT等的训练框架是非常具有挑战性的,但理论上是可能的。以下是如果你决定用C语言开发LLM训练框架可能需要考虑的几个方面:
1. **数学计算库** - 你需要高效的线性代数库来支持大量的矩阵运算,因为神经网络的训练需要大量的矩阵乘法、向量加法等操作。你也可能需要实现或利用现有的自动微分库来进行梯度的计算。
2. **并行计算** - 训练大型模型需要大量计算资源,通常需要GPU或TPU等硬件加速。在C语言中,为了最大化硬件性能,你可能需要使用CUDA或OpenCL等来编程这些硬件。
3. **数据处理** - 在训练之前需要对大量的数据进行预处理,这可能包括文本的标记化、编码、批处理等。C语言处理这些任务可能不像Python那么方便,但仍然是可以做到的。
4. **分布式计算** - 由于模型和数据的规模可能很大,训练过程可能需要在多个节点上分布式运行。实现有效的分布式计算和通信是另一大挑战。
5. **内存管理** - C语言不像一些高级语言如Python具有自动垃圾收集机制,你需要手动管理内存的分配和释放,这在处理大规模数据集时尤其重要。
6. **模型架构** - 实现模型的各个层次,如Transformer层、注意力机制、前馈网络等,需要深入理解这些结构并使用C语言准确实现它们。
7. **优化算法** - 实现各种优化算法(如Adam、SGD等)并且确保它们在大规模数据集上能够稳定运行。
尽管有以上挑战,使用C语言可以带来性能上的优势,因为它能提供更接近硬件层面的控制。然而,现代的深度学习框架(如TensorFlow、PyTorch等)大多是用C++编写底层计算代码,并提供Python接口以方便使用、迭代和社区贡献。因此,如果没有非常充分的理由,通常建议使用现成的框架进行LLM训练。如果需要性能优化,你可以考虑在现有框架的基础上进行定制,而不是完全从头开始用C语言编写。

讯飞星火

LLM(Language Model)是一种基于深度学习的自然语言处理模型,通常使用神经网络进行训练。在C语言中,我们可以使用一些深度学习库来实现LLM的训练,例如FAIR的FastText库。以下是一个简单的C语言实现LLM训练的示例:

首先,安装FastText库。在终端中输入以下命令:

git clone https://github.com/facebookresearch/fastText.git
cd fastText
mkdir build
cd build
cmake ..
make
make install

准备训练数据。创建一个名为train.txt的文件,其中包含用于训练LLM的文本数据。每行表示一个文本样本,用空格分隔单词。例如:

我 爱 北京 天安门
你 好 世界

编写C语言代码来训练LLM。创建一个名为llm_train.c的文件,然后将以下代码粘贴到文件中:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fasttext.h"

int main(int argc, char **argv) {
    if (argc != 2) {
        printf("Usage: %s <train_data>
", argv[0]);
        return 1;
    }

    const char *train_data = argv[1];
    const char *model_output = "model";
    const int epoch = 5;
    const int lr = 0.1;
    const int dim = 100;
    const int ws = 5;
    const int minCount = 1;
    const int neg = 5;
    const int wordNgrams = 1;
    const int loss = ns::sampled_softmax;
    const double label = '__label__';

    printf("Training LLM with FastText...
");
    FastText ft;
    ft.setTrainMethod(loss);
    ft.setDimension(dim);
    ft.setWindowSize(ws);
    ft.setMinCount(minCount);
    ft.setNegativeSamples(neg);
    ft.setWordNgrams(wordNgrams);
    ft.setLearningRate(lr);
    ft.train(train_data, epoch, model_output);

    printf("Model saved to %s.bin
", model_output);
    return 0;
}

编译并运行代码。在终端中输入以下命令:

gcc -o llm_train llm_train.c -I../src -L../build -lfasttext -lm -pthread -O3
./llm_train train.txt

训练完成后,模型将保存为model.bin文件。可以使用FastText提供的其他工具来评估和测试模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/597867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中的RegExp和Cookie

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f506;RegExp &#x1f3b2; 1 什么是正则表达式 &#x1f3b2;2 创建…

组件化开发根组件

目录 一、组件化开发介绍 二、根组件 一、组件化开发介绍 组件化&#xff1a;一个页面可以拆分成一个个组件&#xff0c;每个组件有着自己独立的结构、样式、行为。 好处&#xff1a;便于维护&#xff0c;利于复用&#xff0c;提升开发效率。 二、根组件 组件分类&#xff…

MindSponge分子动力学模拟——安装与使用

技术背景 昇思MindSpore是由华为主导的一个&#xff0c;面向全场景构建最佳昇腾匹配、支持多处理器架构的开放AI框架。MindSpore不仅仅是软件层面的工具&#xff0c;更重要的是可以协同华为自研的昇腾Ascend平台&#xff0c;做到软硬件一体的行业解决方案。基于MindSpore的高通…

Gin 框架的使用

1、Gin 快速开发 1.1、环境准备 1.1.1、导入 gin 依赖 这里就叫 gin 依赖了&#xff0c;在 Goland 命令行中输入下面的命令&#xff1a; go get -u github.com/gin-gonic/gin 1.1.2、设置代理 如果下载失败&#xff0c;最好设置一下代理&#xff0c;在 cmd 命令行中输入下…

react【实用教程】 搭建开发环境(2024版)Vite+React (官方推荐)

以项目名 reactDemo为例 1. 下载脚手架 在目标文件夹中打开命令行 npm create vite2. 安装项目依赖 cd reactDemo npm i若安装失败&#xff0c;则修改下载源重试 npm config set registry https://registry.npmmirror.com3. 启动项目 npm run dev4. 预览项目 浏览器访问 http…

亚马逊FBA头程多少钱一公斤?FBA头程怎么收费?

在亚马逊的电商生态中&#xff0c;FBA服务已经成为许多卖家提升客户满意度和销售效率的重要工具&#xff0c;然而&#xff0c;对于使用FBA服务的卖家来说&#xff0c;选择一家合适的物流合作伙伴并了解其FBA头程的收费标准和计费方式同样至关重要&#xff0c;亚马逊FBA头程多少…

Elsevier——投稿系统遇到bug时的解决方法

重要&#xff1a;找期刊客服&#xff01;&#xff01;&#xff01; 一、方法&#xff1a; 1. 点击进入与官方客服的对话 2. 按要求输入个人信息 3. 输入遇到的问题 比如&#xff1a; 主题&#xff1a;The Current Status is jammed. 详细描述&#xff1a;The Current State o…

XSS-Labs 靶场通过解析(上)

前言 XSS-Labs靶场是一个专门用于学习和练习跨站脚本攻击&#xff08;XSS&#xff09;技术的在线平台。它提供了一系列的实验场景和演示&#xff0c;帮助安全研究人员、开发人员和安全爱好者深入了解XSS攻击的原理和防御方法。 XSS-Labs靶场的主要特点和功能包括&#xff1a;…

数据结构:线性表(详解)

线性表 线性表的知识框架&#xff1a; 线性表的定义&#xff1a; 线性表是具有相同数据类型的n(n > 0)个数据元素的有限序列&#xff0c;当n 0时线性表为一个空表。 若用L命名为线性表&#xff0c;则数据集合为L {a1,a2,…,an}&#xff0c;其中a1称为表头元素&#xff0c…

【方法】如何创建RAR格式压缩文件?

为了方便存储或者传输文件&#xff0c;我们经常会把文件打包成不同格式的压缩包&#xff0c;那如果想创建的是RAR格式的压缩包&#xff0c;要如何做呢&#xff1f; RAR是WinRAR软件独有的压缩格式&#xff0c;所以我们可以通过WinRAR软件来创建RAR格式压缩包。下面分享两种创建…

02_SpringBoot程序快速启动

目录 打包命令启动启动成功测试结果 打包 点击package打包命令&#xff0c;会生成target目录&#xff0c;目录下会有生成的jar包 命令启动 打开cmd命令窗口&#xff0c;进入子项目的target目录下,输入命令后&#xff0c;回车… java -jar .\note-boot-core-1.0-SNAPSHOT.j…

一起深度学习

CIFAR-10 卷积神经网络 下载数据集构建网络运行测试 下载数据集 batchsz 32cifar_train datasets.CIFAR10(data,trainTrue,transformtorchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()]),downloadTrue)cifar_train …

电脑录屏什么软件好?网友力荐的3款软件!

随着电脑的使用越来越广泛&#xff0c;电脑录屏软件也成为了人们日常生活中经常需要使用到的工具。无论是录制游戏画面、教程演示还是远程教育&#xff0c;一款优秀的电脑录屏软件都能为用户提供极大的帮助&#xff0c;可是电脑录屏什么软件好呢&#xff1f;本文将为大家介绍3款…

图形存储与处理在AI去衣技术中的关键角色

引言&#xff1a; 随着人工智能技术的不断进步&#xff0c;AI去衣技术作为一种颇具争议的应用&#xff0c;已经引起了广泛的关注。该技术依托于深度学习、计算机视觉等领域的先进成果&#xff0c;通过分析图像内容实现对人物衣物的识别和去除。在这一过程中&#xff0c;图形存储…

repo跟git的关系

关于repo 大都讲的太复杂了,大多是从定义角度跟命令角度去讲解,其实从现实项目使用角度而言repo很好理解. 我们都知道git是用来管理项目的,多人开发过程中git功能很好用.现在我们知道一个项目会用一个git仓库去管理,项目的开发过程中会使用git创建分支之类的来更好的维护项目代…

stateflow绝对时间逻辑实操

使用after运算符替换at运算符 如果将at运算符与绝对时间-时间逻辑一起使用,则在尝试模拟模型时会出现错误消息。请改用after运算符。 假设您想使用(5.33,秒)的转换来定义时间延迟。 将转换更改为after(5.33秒),如图所示。这样就不报错了。 使用带有后运算符的外部自循…

【源码+文档+安装教程】校园社团信息管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了校园社团信息管理系统的开发全过程。通过分析校园社团信息管理系统管理的不足&#xff0c;创建了一个计算机管理校园社团信息管理系统的方案。文章介绍了校园社团…

【EasySpider】EasySpider+mysql执行配置异常

问题 使用易采集工具操作时候&#xff0c;遇到一个执行异常&#xff0c;后来发现没有选择数据类型 Loading stealth.min.js MySQL config file path: ./mysql_config.json 成功连接到数据库。 Successfully connected to the database. Traceback (most recent call last):…

做了两年数仓,积累的12条SQL调优技巧

本文是作者本人做数仓调优时&#xff0c;所经常使用的SQL调优技巧&#xff0c;这些“技巧”也是经过日常不断摸索、问题排查以及网络检索并且经过本人在线上大规模使用过的&#xff0c;对于下面这12条&#xff08;不算多&#xff0c;但特别有用&#xff09;调优小“技巧”&…

[qnx] 通过zcu104 SD卡更新qnx镜像的步骤

0. 概述 本文演示如果给Xlinx zcu104开发板刷入自定义的qnx镜像 1.将拨码开关设置为SD卡启动 如下图所示&#xff0c;将1拨到On,2,3,4拨到Off&#xff0c;即为通过SD启动。 2.准备SD卡中的内容 首先需要将SD格式化为FAT32的&#xff08;如果已经是FAT32格式&#xff0c;则…