- 博客(141)
- 资源 (21)
- 收藏
- 关注
原创 Linux查看某个用户使用总内存脚本
将 替换为你要上传的 Docker 镜像的ID, 替换为你在 Docker Hub 上的用户名, 替换为你要上传的镜像名称, 替换为镜像的标签。如果没有,请前往 Docker Hub (https://hub.docker.com/) 注册一个账号。在 Docker Hub 网站上登录你的账号,你应该能够在你的仓库列表中看到刚刚上传的镜像。这些步骤将会将你的 Docker 镜像上传到 Docker Hub 以供其他人访问和使用。
2024-05-27 17:57:51
376
原创 std::shared_ptr 自定义deleter
bm_image需要定制化的deleter,可以通过reset和lambda表达式配合实现。
2024-05-27 17:47:41
236
原创 Ubuntu界面在MacOS可视化、显示ubuntu的GUI到本地
本文提供两种方法实现在MacOS上的Ubuntu GUI(图形界面)显示。方法一功能更加强大,但是界面相对卡顿一些,适合检查性操作,比如刚入门的小白还不太习惯通过命令终端去执行操作,就可以用这种方法作为辅助。方法二更加轻量,可以实现服务器端单个应用的GUI到主机上的映射(比如打开jupyter notebook、pycharm),对GUI界面操作时很流畅。
2024-05-27 17:35:38
567
原创 Ubuntu 20.04 上安装和配置 VNC
请确保以具有 sudo 权限的用户身份登录。建议使用具有 sudo 权限的普通用户进行处理,而不是直接使用 root 用户。创建用户并加入 sudoers 可自行百度。
2024-05-27 17:31:08
6771
1
原创 Git本地仓库与远程仓库关联
或命令的含义是,推送master分支到远程origin仓库master分支,并且建立本地分支master的upstream为origin/master。(关于git push更详细的解释,请参考第04节)设置本地分支br01的upstream为origin/br01-remote。或push的时候直接设置。
2024-05-24 16:47:24
505
原创 docker image上传至docker hub
将 <镜像ID> 替换为你要上传的 Docker 镜像的ID,<你的用户名> 替换为你在 Docker Hub 上的用户名,<镜像名称> 替换为你要上传的镜像名称,<标签> 替换为镜像的标签。如果没有,请前往 Docker Hub (https://hub.docker.com/) 注册一个账号。在 Docker Hub 网站上登录你的账号,你应该能够在你的仓库列表中看到刚刚上传的镜像。这些步骤将会将你的 Docker 镜像上传到 Docker Hub 以供其他人访问和使用。
2024-05-24 16:38:49
319
原创 通过ssh在本地打开远程服务器的网页
在远程服务器使用jupyter notebook或者tensorboard等时,在本地打开服务器端的网页的方式有很多比如可以使用MobaXterm工具等,此方法可参考https://blog.csdn.net/cc__cc__/article/details/108060618?其中8888是本地端口号,8008是服务器端端口号,可根据实际情况进行调整。
2024-05-24 16:36:31
2078
原创 Linux 配置SSH免密登录(SSH互信)
有时候两台或多台主机之间我们希望可以进行免密登录,其实SSH有提供这样的功能,只需三步。首先在SSH服务端配置允许公钥私钥配对认证,然后在客户端生成公钥,最后将客户端的公钥上传到服务端。这样就可以从客户端免密登录服务端特定的用户了。
2024-05-24 16:31:48
2447
原创 Valgrind的安装与使用
Valgrind 提供了多种工具和选项,用于检测不同类型的问题,如内存泄漏、使用未初始化的变量等。Valgrind 是一款用于检测内存错误和性能问题的工具。请注意,Valgrind 可能无法检测所有问题,但它是一款强大的工具,对于查找和解决内存问题非常有帮助。注意:Valgrind 在检测内存问题时会导致程序运行变慢,因此不适合在生产环境中长时间运行。要了解 Valgrind 的更多用法和选项,请查阅 Valgrind 官方文档或在线资源。Valgrind 会执行你的程序,并输出内存错误和泄漏的信息。
2024-05-24 15:56:23
906
原创 C++对象切片错误
C++对象切片错误是指在使用继承关系的类时,将派生类对象赋值给基类对象,导致派生类的特有成员被切掉,只保留了基类的部分成员。这通常是因为使用了对象的引用或指针来存储派生类对象,但将其赋值给基类对象的时候发生的错误。
2024-05-24 15:37:05
265
原创 C++使用范围for语句处理多维数组
这样得到的 row 的类型就是 int * ,显然内层的循环就不合法了,编译器将试图在一个 int * 内遍历,这显然和程序的初衷相去甚远。这样得到的 row 的类型就是 int * ,显然内层的循环就不合法了,编译器将试图在一个 int * 内遍历,这显然和程序的初衷相去甚远。第二个 for 循环遍历那些4元素数组中的某一个,因此col的类型是整数的引用。举一个例子,考虑如下的循环∶。第一个for循环遍历ia的所有元素,这些元素是大小为 4 的数组,因此 row的类型就应该是含有4个整数的数组的引用。
2024-05-24 14:49:12
522
原创 C++中Lambda表达式的使用场景
总的来说,Lambda表达式在C++中有许多实用的使用场景,它可以让代码更加简洁、灵活,并提高开发效率。但也需要注意适度使用,避免在Lambda内部写过于复杂的逻辑,以保持代码的可读性和维护性。
2024-05-24 13:15:34
416
原创 C++中const、引用类型初始化
如果成员是const、引用,或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始值列表为这些成员提供初值。类成员的初始化可以通过构造函数的参数列表初始化,也可以在构造函数中赋值完成初始化。
2024-05-24 09:59:23
282
原创 C++ std::lock_guard
/ 构造时自动加锁// 构造时自动加锁 std :: lock_guard < std :: mutex >(kMutex);// 离开局部作用域,析构函数自动完成解锁功能 }// 构造时自动加锁 std :: lock_guard < std :: mutex >(kMutex);// 离开局部作用域,析构函数自动完成解锁功能 }// 构造时自动加锁 std :: lock_guard < std :: mutex >(kMutex);
2024-05-24 09:44:12
1413
原创 C++ Lambda表达式
其中,capture list 是捕获列表,用于指定需要在 lambda 表达式中使用的外部变量。Lambda 表达式非常灵活,可以用于各种场景,例如在 STL 算法中作为谓词(predicate)、用于多线程编程中、在算法中进行数据处理等等。在上面的示例中,我们创建了一个 lambda 表达式,它捕获了外部变量 x 和 y,并计算它们的和。Lambda 表达式是 C++11 中引入的一种用于创建匿名函数的特殊语法。它允许我们在代码中定义一个临时的、无名的函数对象,而无需显式定义一个函数。
2024-05-24 09:40:28
310
原创 替换github某个仓库的email
更改GitHub仓库中提交的电子邮件地址可以通过两种主要方式来实现:更改未来提交的用户电子邮件配置,以及重写历史中的提交以更改旧提交的电子邮件地址。请注意,更改历史提交的电子邮件地址会改写仓库的历史,这可能会对其他贡献者造成影响,因此在执行这些操作之前,请确保与团队成员进行了充分的沟通。
2024-05-09 11:33:38
737
原创 torch中tensor的in-place操作
在PyTorch中,张量(tensor)的行为与numpy数组类似,但也有它们自己的特点。下面是对您提供的两段代码的解释:对于 Y = Y + X:这里发生的是一个非就地(out-of-place)操作。Y + X 创建了一个新的张量来存储加法的结果,然后这个新的张量被赋值给变量Y。因此,Y的id会改变,因为它现在引用了一个新的对象。所以,id(Y) == before 的结果将是 False。对于 X += Y 或者 X.add_(Y):这里发生的是一个就地(in-place)操作。
2024-04-29 10:36:10
311
原创 【论文阅读】OpsEval
信息技术(IT)运营(Ops),特别是用于IT运营的人工智能(AlOps),是保持现有信息系统有序和稳定运行的保证。根据Gartner的预测,将人工智能技术用于自动化IT运营已成为一种新趋势。大型语言模型(LLM)在NLP相关任务中表现出非凡的能力,在AlOps领域显示出巨大的潜力,例如在故障的根本原因分析、操作和维护脚本的生成以及警报信息的总结等方面。尽管如此,当前LLM在运营任务中的表现尚未确定。需要一个全面的基准来优化为Ops(OpsLLM)量身定制的LLM。
2024-03-10 13:55:44
1302
1
原创 Multi-Head Attention详解
文中大部分内容以及图片来自:https://medium.com/@hunter-j-phillips/multi-head-attention-7924371d477a当使用 multi-head attention 时,通常d_key = d_value =(d_model / n_heads),其中n_heads是头的数量。研究人员称,通常使用平行注意层代替全尺寸性,因为该模型能够“关注来自不同位置的不同表示子空间的信息”。
2024-02-29 21:49:22
3547
原创 Transformer之Residuals & Decoder
我们需要提到的编码器架构中的一个细节是,每个编码器中的每个子层(self-attention,,ffnn)周围都有一个残余连接,然后是 layer-normalization 步骤。如果我们要可视化向量和与 self attention 相关的 layer-norm 运算,它看起来是这样的这也适用于解码器的子层。如果我们考虑一个由2个堆叠的编码器和解码器组成的Transformer,它看起来就像这样。
2024-02-29 12:15:54
1306
原创 Transformer之Positional Encoding
正如我们到目前为止所描述的那样,模型中缺少的一件事是解释输入序列中单词顺序的方法。为了解决这个问题,transformer 在每个输入嵌入中添加一个矢量。这些向量遵循模型学习的特定模式,这有助于它确定每个单词的位置,或序列中不同单词之间的距离。这里的直觉是,将这些值添加到嵌入中,一旦它们投射到Q/K/V矢量中,并在点积 attention 期间,嵌入向量之间会提供有意义的距离。如果我们假设嵌入的维数为4,那么实际的位置编码将是这样的这个模式会是什么样子呢?
2024-02-29 11:18:18
506
原创 Transformer之multi-head
当我们对“it”这个词进行编码时,一个注意力头主要关注“animal”,而另一个注意力头主要关注“tired”——从某种意义上说,模型对“it”这个词的表征融合了“动物”和“累”的一些表征。我意识到这是相当多的矩阵。既然我们已经触及了注意头,让我们回顾一下之前的例子,看看当我们在例句中对单词 “it” 进行编码时,不同的注意头集中在哪里。如果我们做同样的 self-attention 计算,只是8次不同的权重矩阵,我们最终会得到8个不同的Z矩阵。我们连接矩阵,然后将它们乘以一个附加的权重矩阵WO。
2024-02-29 10:50:14
647
原创 Transformer之self-attention
注意力是一个有助于提高神经机器翻译应用程序性能的概念。在这篇文章中,我们将看看Transformer,一个使用注意力来提高这些模型训练速度的模型。Transformer在特定任务中优于谷歌神经机器翻译模型。在这篇文章中,我们将尝试简化一些内容,并逐一介绍概念,希望能够让没有深入了解主题的人更容易理解。
2024-02-28 23:56:53
1050
原创 用GGUF和Llama.cpp量化Llama模型
GGML是一个专注于机器学习的C语言库。它是由Georgi Gerganov创建的,这是GG的首字母缩写。这个库不仅提供了机器学习的基本元素,如张量,而且还提供了一种独特的二进制格式来分发llm。该格式最近更改为GGUF。这种新格式被设计为可扩展的,因此新特性不会破坏与现有模型的兼容性。它还将所有元数据集中在一个文件中,例如特殊 tokens、RoPE缩放参数等。简而言之,它解决了历史上的一些痛点,而且应该经得起未来的考验。欲了解更多信息,您可以在此地址阅读规范。
2024-02-26 14:26:00
5255
1
原创 使用GPTQ进行4位LLM量化
当一些权重被中间更新推到网格之外时,这种效果可能会恶化。一个简单的启发式应用来防止这种情况:异常值一出现就被量化。这个过程可能需要大量的计算,特别是对于LLMs。为了解决这个问题,OBQ方法使用了一种技巧,避免在每次简化权重时重新进行整个计算。量化权重后,它通过删除与该权重相关的行和列(使用高斯消去)来调整计算中使用的矩阵(Hessian矩阵)。该方法还采用向量化的方法,一次处理多行权矩阵。尽管OBQ的效率很高,但随着权值矩阵的增大,OBQ的计算时间也会显著增加。
2024-02-26 12:17:31
3566
原创 LLM权重量化
我们可以计算尺度是255/(3.2+3.0) = 41.13,zero point为 -round(41.13•-3.0)-128 = 123- 128 = -5,因此我们之前的0.1权重将被量化为round(41.13 * 0.1 - 5)= -1。然而,它们的局限性,特别是在处理异常值时,导致了LLM.int8(),这种技术也保留了模型的性能。通常,模型的大小是通过将**参数的数量(大小)乘以这些值的精度(数据类型)**来计算的。现在我们的模型已经被量化了,我们想要检查这个过程的影响。
2024-02-25 01:21:13
1309
原创 7.3 CONSTANT MEMORY AND CACHING
因此,当warp中的所有线程访问相同的恒定内存变量时,就像M的情况一样,缓存可以提供大量的带宽来满足线程的数据需求。为了减轻内存瓶颈的影响,现代处理器通常使用片上缓存存储器或缓存,以减少需要从主存储器(DRAM)访问的变量数量,如图7.9所示。更好的是,所有线程都以相同的顺序访问M元素,从M[0]开始,并通过图7.6.中for循环的迭代一次移动一个元素。请注意,这是一个特殊的内存复制函数,它通知CUDA运行时,在内核执行期间,复制到常量内存的数据不会更改。然后,变量的值将从缓存中提供,无需访问DRAM。
2024-01-09 17:47:36
429
原创 7.2 1D PARALLEL CONVOLUTION—A BASIC ALGORITHM
为了简单起见,我们假设Mask_Width是一个奇数,卷积是对称的,即Mask_Width是2*n + 1,其中n是整数。因此,在if声明中,它们都将是一些不同的决定。计算P[0]的线程将跳过大约一半的乘法累积语句,而计算P[1]的那个会少跳过一次,以及以此为由。我们假设1D卷积内核收到五个参数:指向输入数组N的指针,指向输入掩码M的指针,指向输出数组P的指针,掩码Mask_Width的大小,以及输入和输出数组宽度的大小。
2024-01-09 17:01:10
477
原创 Parallel patterns: convolution —— An introduction to stencil computation
应该清楚的是,P[0]的计算将涉及两个缺失的N个元素,在本例中,这两个元素都将被假定为0。我们使用5元素掩码M的事实意味着每个P元素是由对应位置的N个元素的加权和生成的,左边是两个N个元素,右边是两个N个元素。例如, P[2] 的值生成为 N[0](即 N[2-2])到N[4](即N[2+2])的加权和。在图7.1中,P[i] 的计算可以看作是从 N[i-2] 开始的N子数组和M数组之间的内积。也就是说,P[3] 的值是N[1](即N[3-2])通过N[5](即N[3 + 2])的加权和。
2024-01-09 16:29:25
1170
原创 CUDA并行计算对精度的影响
并行归约(Parallel Reduction): 在并行计算中,例如在进行归约操作时,如果不小心处理浮点数相加可能导致累积误差。在一些科学计算应用中,数值精度是非常关键的,因此在选择并行算法和优化技术时需要仔细考虑。在这个简单的向量相加的CUDA内核中,如果输入数组 a 和 b 中包含极小或极大的浮点数,那么在并行计算中可能会由于浮点数舍入误差而引入一些微小的差异。数据依赖性: 并行计算中,如果存在数据依赖性,即某个计算的结果依赖于其他计算的结果,可能会导致数值不稳定性。虽然这在串行计算中也存在,但。
2024-01-09 15:24:17
855
原创 5.5 THREAD GRANULARITY
如图5.17所示,相邻 tile 中两个P元素的计算使用相同的 M 行。使用原始的 tile 算法,相同的M行被分配给生成这两个P tile 的两个块冗余加载。有时,在每个线程中投入更多工作并使用更少的线程是有利的。图5.17说明了矩阵乘法的这种机会。图5.6中的tile算法,使用一个线程来计算输出P矩阵的一个元素。正如我们在上一节中讨论的,可以在每个SM上运行的块数量可能会减少。在实践中,组合多达四个相邻的水平块来计算相邻的水平tile,显著提高了大型(2048x2048或更多)矩阵乘法的性能。
2024-01-09 14:07:39
420
原创 5.4 DYNAMIC PARTITIONING OF RESOURCES
如果每个线程块包含256个线程,则对1536个线程插槽进行分区并分配给6个线程块。他们可以执行许多线程块,每个线程很少,也可以执行几个线程块,每个线程有很多线程。如果每个线程块由512个线程组成,则1536个线程插槽被分区并分配给三个块。阅读器参考CUDA占用计算器[NVIDIA],这是一个可下载的Excel工作表,根据内核对资源的使用情况,计算每个SM上运行的线程的实际数。通过在块之间动态分区寄存器,如果需要很少的寄存器,SM可以容纳更多的块,如果需要更多的寄存器,则可以容纳更多的块。
2024-01-09 13:57:25
414
原创 5.3 WARPS AND SIMD HARDWARE
我们现在把注意力转向线程执行中可能限制性能的方面。回想一下,启动CUDA内核会生成一个线程网格,该网格被组织为两级层次结构。在顶层,网格由一维、二维或三维块阵列组成。在底层,每个块依次由一维、二维或三维线程阵列组成。在第3章,可扩展并行执行中,我们看到块可以以任何相对的顺序执行,这允许跨不同设备的透明可扩展性。然而,我们没有过多说明每个块内线程的执行时间。从概念上讲,人们应该假设块中的线程可以相互之间以任何顺序执行。在具有相位的算法中,每当我们想确保所有线程在开始下一阶段之前都已完成执行的通用阶段时,就应
2024-01-09 12:50:14
933
原创 5.2 MORE ON MEMORY PARALLELISM
例如,如果有更多的元素,M[16]和M[17]将存储在通道0的0bank中,M[18]和M[19]将存储在通道1的0 bank中,等等。通道和bank的地址是,阵列的前八字节(M[0]和M[1])存储在通道0的bank0中,接下来的八字节(M[2]和M[3])存储在通道1的bank0中,接下来的八字节(M[4]和M[5])存储在通道2的bank0中,接下来的八字节(M[6]和M[7])存储在通道3的bank0中。也就是说,在进入通道1的0bank之前,我们只分配足够的元素来充分利用通道0的DRAM突发。
2024-01-09 11:29:35
870
基于 DDPG 智能体的四足机器人运动控制
2021-05-30
TrainMultipleAgentsToPerformCollaborativeTaskExample.zip
2021-05-25
TrainBipedRobotToWalkUsingReinforcementLearningAgentsExample.zip
2021-02-21
TrainMultipleAgentsForPathFollowingControlExample.zip
2020-12-24
使用Deep Network Designer创建智能体并使用图像观察进行训练--博客模型
2020-11-09
强化学习python代码-notebook
2020-10-26
一种用于水下机器人分布式编队控制的自适应自组织神经网络方法pdf
2020-10-23
YouCompleteMe.tar.xz YCM 完整包
2020-09-07
RTL8822CE_WiFi_linux_v5.9.0_36003_COEX20191120-1515.20200220-master.zip
2020-09-06
双电机MOS驱动工程(双面板+四层板)智能车驱动
2020-03-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人