CCNN

CCNN
Chinese Convolutional Neural Networks

CCNN,一款完全自主开发的国产人工智能学习推理框架,集成自研算法,支持多元回归、多元分类以及图像、语音和文字识别等深度学习应用。框架兼容多种平台,GPU 加速支持CUDA、Rocm和OpenCL标准,无GPU时可通过C++OpenMP实现 CPU多线程加速,所有算法均为自主实现,未依赖第三方库。CCNN通过XML 配置灵活构建神经网络结构,支持自动微分,已适配VGG16、ResNet50、Bert 等多种模型,并提供多卡并行训练与推理功能。2025年7月推出支持fp16和fp8精度的新版本,计划于同年9月 实现集群训练推理。推荐搭配国产龙芯与OpenCL,彰显自主创新实力。

Get started
Illustration

运行环境及速度

左图给出部分实验数据。以BatchSize为16,不同的网络模型,进行一次学习迭代所需的平均时间。

Speed

CCNN采用宏定义来兼容不同的平台及编译器,对于系统及编译器的不同,使用不同的系统函数来实现同样的功能。主要体现在线程的API函数、字符串处理等少量系统函数。程序编译的时候根据宏定义选择对应的系统函数,实现维护开发一套源代码,可以在不同环境下使用运行。 目前CCNN可以运行在Windows、Ubuntu Linux、UOS Linux、arm Linux、龙芯Linux及Apple Mac系统中。 不使用GPU加速的时候,不需要GPU显卡设备,使用GPU需要安装对应的显卡驱动。 使用GPU加速的时候,使用CUDA、Rocm或OpenCL计算框架,GPU加速设备可使用NVIDIA显卡(CUDA)、AMD显卡(OpenCL、Rocm)、Intel显卡(OpenCL)、MAC GPU(OpenCL)、国产摩尔线程S80(OpenCL)显卡及国产风华二号(OpenCL)显卡。

算法功能

Functions

功能简介
各个层的输入及参数,每个层对应一个张量算子,提供卷积、反卷积、全连接、偏置、激活、Batch Norm、Layer Norm、L2正则化、随机失活、池化、极大采样、剪切等,以及复合算子FCA、CBA、ResN、ResU、融合张量、Btnk1、Btnk2、OneStage、Softmax、TensorToLayer、SumLayer、RNN、GRU、自注意力、多头注意力、transformer等;
损失函数:SoftMax With lost、Focal Lost、MSE、RMSE、MAE;
优化器:SGD、L2正则化、带动量更新批处理大小、最大迭代学习次数、保存学习权重文件次数、学习率;
GPU、CPU内存使用大小配置;
样本增强:几何变化增强、高斯正态分布增强图像读取存储,缩放,通道格式变换;
样本随机: 多线程随机读取BatchNum组数据;

训练及推理

Train

训练:使用自带的训练程序及配置XML文件来训练,也可以通过调用SDK构建网络训练。
推理:通过调用SDK推理,网络结构可以从XML加载或SDK加载。
内存方面:使用参数内存池、计算空间交换内存池,不动态开辟内存,计算过程中使用的内存全部来源于内存池,数据在网络计算流动的时候快速指向定位,没有多余的复制;相比其它人工智能框架极大的减少对内存、GPU显存的需求量。

Download the CCNN

Embark expeditiously on your journey with the domestically developed artificial‑intelligence training framework.

Loongson

龙芯OpenCL Linux版


Start Now
CUDA

X86 CUDA Linux版


Start Now
ROCm

X86 Rocm Linux版


Start Now
macOS

苹果 OpenCL macOS版


Start Now
Windows

X86 OpenCL Windows版


Start Now

Frequently Asked Questions

Here are some of our FAQs. If you have any other questions you'd like answered please feel free to email us.

框架内存如何管理的?
CCNN内存在启动的时候开辟交给内存pool管理,后面整个学习训练过程,都是从Pool里面按需取走多少并使用、用完放回,就没有动态开辟内存形成碎片的问题。 CCNN可配置计算内存大小类型,主参数内存大小、备用参数内存大小类型。神经网络大量知识参数先使用设备内存,设备内存不够,使用主机内存主机内存。利用CPU/GPU取数据的时候,会取走一片内存的特性,对临近计算的数据安排在一片,Cache更好的性能。
第三方库使用情况?
CCNN使用了互联网上开源的三个文件(tinyxml2.cpp:XML文件配置读取;stb_image.h & stb_image_write.h:jpg/jpeg图片文件读写),用于系统开发,其它全部是自己原生实现。使用GPU的时候,也是使用最基础的几个划分网格和线程同步函数,都是自己实现各种算法、系统调用。因此CCNN便于跨平台、编译快、占空间少、部署简单、无依赖。
算法功能有哪些?
INPT, CONV, DECONV, BIAS, AVEPOOL, AVEUS, MAXPOOL, MAXUS, ACTIVE, LN, BN, L2N, FC, CROP, EXPAND, SFMIMG, SFMVEC, SSD, REGRESS, DROPOUT, GRU, CBA, FBA, RESU, RESN, MFL, BTNK1, BTNK2, YOLO3, Linear, F2L, SFM, ATTEN, SUM, SEQ2SEQ, RNN, C_SCALE, SEQ_SUM_CAT,T2L, FILTER等算子;大模型算子:MULTI_HEAD_ATTEN, TRANSFORMER_ENCODE, TRANSFORMER_DECODE, TRANSFORMER等;各算子计算实现自动微分计算 ;FP16、FP32全局计算。FP8、FP16、FP32混合计算(密集计算算子FP8,数值敏感算子FP16、FP32);实现一台服务器上多个GPU(4/8/16/32等多个GPU)同时并行计算(每个GPU分配任务比例可调);XML文件配置数据流 & SDK API配置数据流;网络结构自定义:DNN、VGG16、VGG19、ResNet50、ResNet101、YOLY3、SSD、DSSD、SegNet、U-NET、DeepLabV3、RNN、GRU、Seq2seq(+注意力牵引)、孪生网络、Transformer大模型、BERT大模型。灵活搭配能实现更多结构;

Contact us

反馈问题及技术交流:zqgrmkl@sohu.com