Git Product home page Git Product logo

niutrans / niutensor Goto Github PK

View Code? Open in Web Editor NEW
377.0 134.0 247.0 18.34 MB

NiuTensor is an open-source toolkit developed by a joint team from NLP Lab. at Northeastern University and the NiuTrans Team. It provides tensor utilities to create and train neural networks.

Home Page: http://opensource.niutrans.com/niutensor/

License: Apache License 2.0

C++ 81.19% Cuda 18.17% C 0.21% CMake 0.43%
deep-learning artificial-neural-networks tensor machine-learning

niutensor's Introduction

NiuTensor张量计算库

NiuTensor

NiuTensor是小牛开源项目所开发的一个轻量级工具包,提供了完整的张量定义及计算功能,可以被用于深度学习相关研究及工业系统的开发。NiuTensor具有以下特点:

  • 简单小巧,易于修改
  • C语言编写,代码高度优化
  • 同时支持CPU和GPU设备
  • 丰富的张量计算接口
  • 支持C/C++调用方式

开发文档

更多详细使用方法请见NiuTensor开发文档,包括:

  • 张量计算的调用接口及说明
  • 示例程序(如语言模型、机器翻译等)

安装方法

NiuTensor工具包的安装方式为CMake(跨平台:支持Windows、Linux以及macOS),集成开发环境支持Visual Studio(Windows平台)以及CLion(Linux和macOS平台)。

NiuTensor工具包的第三方运算加速库支持:

  • 所创建项目如在CPU上运行,我们的系统支持高性能的数学运算库,推荐安装MKLOpenBLAS
  • 所创建项目如需在GPU上运行,需安装 CUDA,CUDA版本需求为9.2及以上,CUDA工具为创建高性能GPU加速应用程序提供了开发环境。

注意:

对于第三方运算库的支持中,由于MKL和OpenBLAS二者所实现的API互有重叠,因此不支持同时使用。

工具包的安装

NiuTensor工具包可以在Windows、Linux以及macOS环境下进行安装,支持生成可执行程序以及动态链接库两种目标,具体安装方法如下。

Windows

对于Windows平台下NiuTensor工具包的使用,这里推荐通过Visual Studio集成开发环境对项目进行管理,项目配置使用CMake自动生成。

CMake方式(Visual Studio)

对于Windows平台的NiuTensor工具包安装,这里可以使用CMake工具自动生成Visual Studio项目(需要用户提前安装CMake工具以及Visual Studio集成开发环境),操作步骤如下:

  • 在工具包根目录新建目录以保存生成的Visual Studio项目文件(如建立build目录)。
  • 在项目根目录打开Windows平台的命令行工具(如PowerShell),执行cd build命令进入新建的build目录。
  • 执行CMake命令对Visual Studio项目进行生成(如果 visual studio 版本低于 2019,则在使用下列命令的时候需额外加上-A x64的CMake参数),如计划生成动态链接库,则仅需在命令中额外加上-DGEN_DLL=ON的CMake参数即可,否则默认生成可执行程序。
    • 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在CMake命令中使用-DUSE_MKL=ON参数,并通过-DINTEL_ROOT='/intel/root/path'指定MKL库(Intel工具包)的安装路径。如cmake -DUSE_MKL=ON -DINTEL_ROOT='C:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2020.2.254/windows' ..
    • 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在CMake命令中使用-DUSE_OPENBLAS=ON参数,并通过-DOPENBLAS_ROOT='/openblas/root/path'指定OpenBLAS库的安装路径。如cmake -DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='C:/Program Files/OpenBLAS' ..
    • 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在CMake命令中使用-DUSE_CUDA=ON参数,并通过-DCUDA_TOOLKIT_ROOT='/cuda/root/path'指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如cmake -DUSE_CUDA=ON -DCUDA_TOOLKIT_ROOT='C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2' -DGPU_ARCH=P ..。如需在GPU设备上使用半精度浮点数进行运算,需在启用-DUSE_CUDA=ON参数的同时启用-USE_HALF_PRECISION=ON参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考NVIDIA GPU设备信息进行查询)。
  • 执行成功将显示Build files have been written to:...
  • 打开build目录中的NiuTensor.sln文件即可通过Visual Studio打开NiuTensor项目。
  • 打开后在解决方案管理器中选中NiuTensor,右键将其设为启动项目即可开始使用。

注意:

动态链接库在编译结束后并不能直接运行,生成的库文件将保存在项目根目录的lib路径下,用户可根据自身需求将其嵌入到自己的项目中进行使用。

Linux和macOS

对于Linux和macOS平台下NiuTensor工具包的使用,这里提供两种使用方式进行项目管理,分别为基于CMake的CLion集成开发环境以及CMake工具(命令行)的方式,开发人员可任选其一。

CMake方式(CLion)

对于Linux或macOS平台的NiuTensor工具包安装,CLion集成开发环境可以通过对CMakeLists.txt文件进行解析自动获取项目信息(需要用户提前安装CMake工具以及CLion集成开发环境),操作步骤如下:

  • 使用CLion打开NiuTensor项目所在目录(确保CMakeLists.txt在其根目录位置),CLion将根据CMakeLists.txt文件自动读取项目信息。
  • 打开CLion首选项,点击“构建,执行,部署”选项卡中的CMake,在“CMake选项”中进行设置,设置完成后CLion将自动使用CMake对项目进行构建,如计划生成动态链接库,则仅需在在“CMake选项”中额外加上-DGEN_DLL=ON的CMake参数即可,否则默认生成可执行程序。
    • 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在“CMake选项”中填入-DUSE_MKL=ON,并通过-DINTEL_ROOT='/intel/root/path'指定MKL库(Intel工具包)的安装路径。如-DUSE_MKL=ON -DINTEL_ROOT='/opt/intel/compilers_and_libraries_2020.2.254/linux'
    • 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在“CMake选项”中填入-DUSE_OPENBLAS=ON,并通过-DOPENBLAS_ROOT='/openblas/root/path'指定OpenBLAS库的安装路径。如-DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='/opt/OpenBLAS'
    • 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在“CMake选项”中填入-DUSE_CUDA=ON,并通过-DCUDA_TOOLKIT_ROOT='/cuda/root/path'指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如-DUSE_CUDA=ON -DCUDA_TOOLKIT_ROOT='/usr/local/cuda-9.2' -DGPU_ARCH=P 。如需在GPU设备上使用半精度浮点数进行运算,需在启用-DUSE_CUDA=ON参数的同时启用-USE_HALF_PRECISION=ON参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考NVIDIA GPU设备信息进行查询)。
CMake方式(命令行)

若仅需通过命令行方式对项目进行管理,开发者同样可以使用CMake快速对NiuTensor项目进行编译安装(需要用户提前安装CMake工具),操作步骤如下:

  • 在项目根目录打开Linux或macOS平台的命令行工具(如Terminal),在工具包内新建目录以保存生成的中间文件(如执行mkdir build建立build目录)。
  • 执行cd build命令进入新建的build目录。
  • 执行CMake命令对项目进行生成,如计划生成动态链接库,则仅需在命令中额外加上-DGEN_DLL=ON的CMake参数即可,否则默认生成可执行程序。
    • 如项目计划启用MKL数学运算库(需用户自行安装),则仅需在CMake命令中使用-DUSE_MKL=ON参数,并通过-DINTEL_ROOT='/intel/root/path'指定MKL库(Intel工具包)的安装路径。如cmake -DUSE_MKL=ON -DINTEL_ROOT='/opt/intel/compilers_and_libraries_2020.2.254/linux' ..
    • 如项目计划启用OpenBLAS数学运算库(需用户自行安装),则仅需在CMake命令中使用-DUSE_OPENBLAS=ON参数,并通过-DOPENBLAS_ROOT='/openblas/root/path'指定OpenBLAS库的安装路径。如cmake -DUSE_OPENBLAS=ON -DOPENBLAS_ROOT='/opt/OpenBLAS' ..
    • 如项目计划启用CUDA数学运算库(需用户自行安装),则仅需在CMake命令中使用-DUSE_CUDA=ON参数,并通过-DCUDA_TOOLKIT_ROOT='/cuda/root/path'指定CUDA库的安装路径,通过-DGPU_ARCH=ARCH指定所在GPU设备的架构(K:Kepler架构;M:Maxwell架构;P:Pascal架构;V:Volta架构;T:Turing架构;A:Ampere架构)。如cmake -DUSE_CUDA=ON -DCUDA_TOOLKIT_ROOT='/usr/local/cuda-9.2' -DGPU_ARCH=P ..。如需在GPU设备上使用半精度浮点数进行运算,需在启用-DUSE_CUDA=ON参数的同时启用-USE_HALF_PRECISION=ON参数(需要注意的是半精度但需要注意的是,半精度操作仅在使用Pascal及更新架构的NVIDIA GPU中提供支持,该项可参考NVIDIA GPU设备信息进行查询)。
  • 执行成功将显示Build files have been written to:...并在该目录下生成Makefile文件。
  • 执行make -j命令对NiuTensor项目进行编译,执行成功将显示Built target NiuTensor,安装完毕。

如编译目标为可执行程序,则在完成安装后将在bin目录下生成NiuTensor,如目标为动态链接库,则所生成的库文件将保存在项目根目录的lib路径下。

对于生成可执行程序的安装方式,在环境配置完成后,可以使用NiuTensor -test命令运行本项目的测试用例,如果最后输出

OK! Everything is good!

则说明本项目配置成功。

注意:

若先生成CPU上运行的可执行文件,之后如需生成GPU的可执行文件,需要先执行make clean命令,删除生成CPU时产生的中间结果,反之亦然。

将工具包嵌入到自己的项目中

若希望在自己的项目中使用NiuTensor工具包,这里建议将工具包编译为动态链接库进行使用,编译库的方式可以参考前文所述,而对于库文件的使用规则如下:

  • 在所创建项目中需要引用XTensor.h、core里的CHeader.h和function里的FHeader.h这三个头文件:
    • 通过XTensor.h可以获取我们需要操作的XTensor类。
    • 通过core里的CHeader.h可以对Tensor进行一些张量运算。
    • 通过function里的FHeader.h可以调用一些激活函数。
  • 在所创建项目中使用命名空间nts。

编译过程以单元测试以及样例程序为例(即编译NiuTensor库中的Main.cpp),假设动态链接库所在的路径为当前目录(项目根目录)的lib目录,则通过以下命令可以编译生成可执行文件:

g++ -o App ./source/Main.cpp -L./lib -lNiuTensor -std=c++11

然后将lib目录加入到环境变量中,可以通过以下命令进行临时修改(退出shell后则失效):

export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH

或者将上述命令加入到~/.bashrc配置文件中进行永久修改(需要将相对路径./lib转换为绝对路径),并执行以下这条命令使修改立即生效:

source ~/.bashrc

之后就可以运行App可执行文件。

./App

开发团队

NiuTensor张量计算库由东北大学自然语言处理实验室小牛开源团队开发,致力于为深度学习相关研究及工业系统的开发提供轻量级的张量定义及计算功能。

更新版本

NiuTensor version 0.3.3 - 2020年9月14日

NiuTensor version 0.4.0 - 2021年3月13日

NiuTensor version 0.4.1 - 2021年11月6日

niutensor's People

Contributors

huchinlp avatar jiangyingjunn avatar liyinqiao avatar liyinqiao2012 avatar xiaotong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

niutensor's Issues

An undefined error was encountered during installation

When I installed the GPU version, I encountered an undefined error. The error is as follows. How to fix it? Thank you very much.

./source/tensor/core/movement/CopyValues.cuo:在函数‘nts::_CudaCopyValues(nts::XTensor const*, nts::XTensor*, nts::XStream*)’中: tmpxft_00009cd9_00000000-5_CopyValues.compute_70.cudafe1.cpp:(.text+0x301):对‘nts::XMemCopyAsync(void*, int, void const*, int, unsigned long, CUstream_st*, int)’未定义的引用 tmpxft_00009cd9_00000000-5_CopyValues.compute_70.cudafe1.cpp:(.text+0x541):对‘nts::XMemCopyAsync(void*, int, void const*, int, unsigned long, CUstream_st*, int)’未定义的引用

最新NiuTrans.NMT问题

训练问题:
时间长了,GPU消耗内存会变大,从而中断训练,尤其是valid数据较大时

翻译部分问题:
用自带de-en数据测试,还ok
用中英语料测试,发现问题:

  1. beamsize=1时,有些句子翻译完整,有些只翻译前面部分
  2. beamsize>1时,只翻译少量句子,多数句子输出空白

有两个问题请教

你好!有两个问题请教下:
1.你们提到的深度优化版本什么时候出来?
2.transformer模型训练或预测应该存在问题,什么时候改一个正确的版本我们测试一下?

VS2015编译问题

在win10上用vs2015配置好环境,build时会出现如下output:

1> Sum.obj : error LNK2019: 无法解析的外部符号 cblas_saxpy,该符号在函数 "void __cdecl nts::_Sum(struct nts::XTensor const *,struct nts::XTensor const *,struct nts::XTensor *,float)" (?_Sum@nts@@YAXPEBUXTensor@1@0PEAU21@M@Z) 中被引用
1> XTensorBLAS.obj : error LNK2019: 无法解析的外部符号 cblas_sgemm,该符号在函数 "void __cdecl nts::_MatrixMULCPU(struct nts::XTensor const *,enum nts::MATRIX_TRANS_TYPE,struct nts::XTensor const *,enum nts::MATRIX_TRANS_TYPE,struct nts::XTensor *,float,float)" (?_MatrixMULCPU@nts@@YAXPEBUXTensor@1@W4MATRIX_TRANS_TYPE@1@01PEAU21@MM@Z) 中被引用
1>C:\Users\ZXF\Documents\Visual Studio 2015\Projects\Niutest\x64\Debug\Niutest.exe : fatal error LNK1120: 2 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

如果在 C/C++->预处理器->预处理器定义 中去掉USE_BLAS则可以成功build,请问这种情况是缺少了什么库么?

基于CPU的FP16有支持计划么

您好,

在NiuTensor的Roadmap中看有支持CPU FP16的计划,请问有预计的支持/开放时间么(当前OpenBLAS好像已经支持了BFLOAT16)?看最近Tencent的NCNN和Alibaba的MNN推理框架都已经支持了FP16。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.