自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 收藏
  • 关注

原创 记 Git 解决 feature 分支与 origin/main 分支分化的经历

先更新自己本地仓库的 main 分支到与 origin 的 main 分支一致(不管你是使用命令行还是删除在clone repo都可以),然后 checkout 到你的 feature 分支,然后 git merge main,然后需要你解决一下冲突,然后直接commit再push就好了!C 分支为我的 feature 分支,B 分支为 upstream 和 origin 的 main 分支。但是我犯贱先把 github 上自己 fork 的仓库的 main 分支更新了!

2024-10-25 17:41:58 273

原创 Github PR回退commit

我有一个PR还未合入,现在要解决冲突,但是由于分支分化导致我push上去时把别人的commit也commit上去了!所以我想回退这个commit到未解决冲突前的状态。2. 在本地先 git reset --hard commit_id 退到那个 commit。3. 使用 git push origin HEAD --force 强制推送。1. 先 git log 找到之前那个 PR 的commit id。大功告成,回退了PR的commit!

2024-10-25 17:28:27 107

转载 模型量化原理与实践

转载:模型量化原理与实践 – Robot 9

2024-07-23 16:06:04 57

原创 MOE学习笔记

和传统的 transformer 网络结构相比,我们将 Transformer 模型的每个 FFN 层替换为 MoE 层,MoE 层由门网络(Router)和一定数量的专家(Expert)组成。

2024-06-24 23:07:19 449

原创 git 拉取远程分支到本地

我的 github 上的远程仓库上除了 main 分支外还提交了好几个别的分支,现在我换机器了,git clone 原仓库后只剩 main 分支,我要把其他分支拉下来到本地。1. 查看所有远程remote分支。2. 拉取指定远程分支到本地。

2024-02-23 16:36:50 980

原创 bank conflict

因为尽管第一个 warp 的 0 号线程访问共享内存中 0 和 128 元素,这两个是同一 bank 的不同地址,但是这是一个线程发出的请求,只需要一次事务就能完成(个人理解),所以不会发生 bank conflict(需要不同线程访问统一 bank 的不同地址才会发生 bank conflict)。下面看一个特殊情况,一个线程存储 4 个浮点数,根据下图可以看到 0 号线程和 8 号线程在访问统一存储体的不同地址,按理是会发生 bank conflict 的,但是却没有。

2024-02-02 00:22:33 499

原创 CUDA tips

【代码】CUDA tips。

2024-01-17 00:14:08 478

原创 命令行下载huggingface 受保护模型

背景:我要下载 huggingface 上的 meta 的 llama2 的模型到,这个模型是受保护的,需要先在 meta 的网站上提交申请,申请通过后,才能用和你申请时同邮箱绑定的hugging face账户进行下载这个模型。方法:确保你下载了 `huggingface-cli`

2024-01-11 14:14:40 2279

原创 git解决冲突

记录一次 git 解决冲突的过程。当然,这个 PR 现在还没有合并。然后今天我在这个 PR 的基础上提交新的 commit 的时候,github 提示有冲突:于是就需要我们手动解决了。

2023-11-30 11:16:17 491

原创 wsl2 ubuntu22.04安装docker

1. 安装 docker 官网的步骤一步一步安装即可。

2023-11-07 23:18:36 696

原创 Ubuntu22.04安装nvidia-docker

进行测试(拉取nvidia cuda11.5镜像并运行nvidia-smi)

2023-10-21 15:36:33 2136

原创 模板函数中参数为数组

【代码】模板函数中参数为数组。

2023-04-20 13:17:37 227 1

原创 模板显式声明

第一个是显示声明(function template declaration),第二个是显示实例化(function template specialization)。第一个声明了一个Max模板,告诉编译器 我已经有一个int型的Max函数定义了,编译器不再为这个类型实现模板了。第二个的意思是当编译器遇到这个类型的时候会优先调用我们显式实例化的!显示声明就是人为创造类实例,

2023-04-19 20:04:59 231

原创 模板辅助函数中的swap

比如我们想交换两个 vector,显然上面的代码就无能为力了。容器内自带的 swap 函数,这样就能调用标准的 swap 方法中有两个元素而不是容器自带的swap 方法,显然两个参数的 swap 方法更符合我们的直觉,并且只要你自定义的类实现了像vector一样的 swap 方法就也可以使用 std::swap 来交换你自定义的类!注意到我们的注释:在常数时间内交换两个 vector 的元素,全局的 std::swap 函数被特例化因此 std::swap(v1, v2) 被喂到这个函数。

2023-04-19 17:39:11 208

原创 编程小技巧

本节仅展示一些自己碰到过的比较有意思或者比较优雅的 Python 编程技巧。

2023-04-14 15:43:34 95

原创 WSL安装CUDA

显示找不到 nvcc 也别急,先查看/usr/local/cuda/bin下是否有nvcc可执行程序,如果没有说明cuda没有正常安装,需要重新安装,如果有,进入下一步。添加环境变量,打开~/.bashrc ,添加环境变量export PATH=$PATH:/usr/local/cuda/bin,再保存结果后激活我们的改变。安装完后,输入下面代码查看是否安装成功。根据官网的指令推荐,一个个输入即可。

2023-04-12 00:00:39 659

原创 WSL在Vscode上写文件权限不够

username为你的用户名,directory_path为你想要修改的文件夹权限的路径。

2023-04-11 23:29:12 1788

原创 git clone慢

网上的办法大多是设置代理或者改hosts文件,但是改hosts文件并没有用,他那个ip很快会变,而改代理一般网上都是亚洲的代理没啥用。加上这一条就好多了,基本速度能到1 M/s。

2023-04-07 17:41:23 164

原创 浅析完美转发

也就是:如果我们的wrapper函数的参数传递的是左值,那么内部函数调用时得到的就是左值,如果我们的wrapper函数的参数传递的是右值,那么内部函数调用时得到的就是右值。关于forward函数的具体原理,实际上和 move 函数差不多,用到了完美引用和引用折叠,使得不管传进来的是左值引用还是右值引用,最后得到的都是模板类型所指定的那个类型!如果对左值引用和右值引用的转换不是很清晰的同学可能就会迷糊了,arg1不是右值引用类型的嘛,func2接受的参数也是右值引用类型的呀!C++ Primer第五版。

2023-04-05 14:09:23 434

原创 浅析static_cast将左值转为右值

这说明我们可以使用static_cast将左值转换为右值,可能你会想到std::move,这不也是将左值转换为右值嘛,这俩有什么区别?可以看见,先用remove_reference将T的所有引用全部脱掉,再加上&&,这样不管T是什么类型就都变成了右值引用类型,然后用static_cast将 t 转换为我们的右值引用。不同点在于,static_cast 将左值转换为右值类型,是类型间的转换,而move是将左值转换为右值引用来移交资源所有权。

2023-04-05 12:32:50 702

转载 kaggle运行CUDA代码

参见:Running C++ in Notebooks(Cuda) | Kaggle

2023-04-04 17:38:41 290

原创 使用TensorFlow Serving进行模型的部署和客户端推理

目的:在一个server端使用TensorFlow框架对模型进行训练和保存模型文件后用TensorFlow Serving进行部署,使得能在客户端上传输入数据后得到server端返回的结果,实现远程调用的效果。当然可以自己用Flask框架甚至写一个前端页面,这样同样能达到同样的效果。不过,如果是在真的实际生产环境中部署,这样的方式就显得力不从心了。这时,TensorFlow 为我们提供了 TensorFlow Serving 这一组件,能够帮助我们在实际生产环境中灵活且高性能地部署机器学习模型。

2023-03-20 20:21:19 949

原创 为多态基类声明virtual析构函数

如上面代码所示,我们的三个工厂函数都是用的基类来指向的,因为我们用的 new 来创建对象,所以自然要用 delete 释放掉,可是问题来了,我们的ptk指针是用基类指向子类对象,那么我们释放的时候是调用基类的析构还是子类的析构函数呢?因为这里是静态联编,在运行之前,编译器只知道ptk是 TimeKeeper类型的,自然是调用基类的析构,但是我们实例化的是一个子类啊,你调用基类的析构,那子类中万一有一些基类没有的元素呢?问题的关键在于在实现多态的时候,堆区的内存可能会泄露,这是要用虚析构!

2023-02-25 22:01:51 426

原创 若不想使用编译器自动生成的函数,就应该明确拒绝

但是如果我们为了严谨和安全性不想这样呢,我们可能想拷贝的时候不要全部的东西全拷贝了,毕竟世界上没有两片相同的树叶,那你当然可以自己定义拷贝构造函数,但是如果你更狠直接拒绝拷贝这种行为,你该怎么办呢?我们知道,在cpp中,哪怕我们没有定义拷贝构造函数编译器也会自动帮我们生成一个拷贝构造函数,例如在下面的代码中,我们定义的person类并没有定义拷贝构造函数,但是我们依然能用'p2=p1'。在上面的代码中,我们仅仅声明了拷贝构造函数而没有实现并且定义为private的,此时编译器便组织了我们的拷贝操作。

2023-02-25 20:26:00 111

原创 上传本地项目到github

先创建一个main分支,网上很多教程是直接git push -u origin master,因为github默认分支为main(没有master分支),所以这样会直接在github上新建一个分支master,因此你打开你的仓库默认会显示你的空的main分支,你要手动点击你的master分支才能看到你的代码,因此很不方便!如果我们直接git push -u origin main也是不行的,因为我们的git里没有main分支,所以我们要新建一个main分支。第四步、将本地仓库和github仓库关联。

2023-01-01 12:33:49 157

原创 channel实战中的使用

之前学channel都是学一些基本的语法、规则和注意事项,但是任何知识只是强硬的给你灌输该怎么用,而不知道什么时候用,什么地方用的话,肯定是不行的。今天在看一个项目的源码的时候,就发现乐channel在这个项目中作为接受信号中断、接受错误来使用!先看这段代码,这段代码先定义了一个中断信号,三个case分别用来接受信号和错误,第一个signal.Notify是内置函数,目前对channel,携程应用场景还不是很熟悉,希望以后加深理解了一定会写一篇从语法到具体应用场景的详细文章!

2022-12-24 12:54:26 300

原创 浅析JWT

我们都知道JWT一般用于用户登录等需要记住的操作,在谈论JWT之前就不得不谈谈以前的cookie-session登录了。因为http协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录(也就是说你登陆过后哪怕你刷新一下他也不认识你了,还要你继续登录);Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。互联网服务离不开用户认证,一般流程如下:这就是Cookie-session方法。

2022-12-22 12:16:37 1008

转载 windows安装mysql

参见这篇博客,仅下载了mysql-server,对个人学习来说是够用了。

2022-12-17 14:30:54 85

原创 Slice的坑

我的本意是将*track append到*result中,但是直接append结果不对,result不变,然而copy一遍后再append到*result的话就对了,所以显然不是第一条slice的容量的坑,目前还没发现原因,夜已深,后面找到原因了再填坑。1、Slice容量不够时,再append就变成新生成的一个slice了。在leetcode的46题,我的代码如下。2、append时结果不变。

2022-12-14 00:04:27 150

原创 返回值列表已定义了返回变量则if中别用:=再声明这个变量

代码的主要逻辑就是根据id值在数据库查找社区community,关键在26行,我本意是如果db.Get从数据库没有拿到了community并且是sql.ErrNoRows错误,那么err自然就是ErrorInvalidID,自然也就不为nil,由于我们在返回值列表中声明了err,那么返回的err也就是nil,那么上一层调用了这个函数发现了err不为空自然会给出对应的错误逻辑,但是上一层并没有那么做,也就是说我们返回的err并不是nil!细心的你一定发现了26行的err是绿的,没错!

2022-12-02 20:23:11 261

原创 实现map有序输出

上面代码就是定义并初始化了一个map,定义了一个空切片sli,并遍历map将map的键都存进切片sli里,并对sli进行排序就得到了有序的键,最后只需要从切片sli里取出键即可。我们知道golang里的map是无序的,不像python里的字典还可以对键值对顺序反序啥的。所以我们下面手动实现map的有序输出,其实原理很简单!这里遍历map只取出键没取出值,这是因为知道键就能根据map直接得到值,所以提升了一点效率!

2022-11-15 22:17:20 1199

原创 切片和map遍历的优化

下面代码中定义了两种遍历切片的方式 RangeSlice_norm和RangeSlice_fast,快速方式在于遍历的时候不用每次都给value赋值而是通过已经拿到索引的条件下通过索引取值。可以看到在切片长度很大的情况下效率还是有一些提升的!

2022-11-11 09:34:13 263

原创 对slice进行append但切片容量不够

我们在上面结果可以看到,cap和len都是3,说明cap是不够的,因此是重新分配一个array!可以看到结果返回false,说明slice与newSlice第一个元素地址并不一样。哦吼,如果容量不够的话会重新分配一个array,而并不是我们想的原地追加。先看上面这段代码,你觉得结果是多少?

2022-11-08 10:35:10 148

原创 两种for循环效率比较

可以看到,它的for循环遍历中,初始化变量初始化了两个,一个i一个遍历的长度,确实妙,这样就不用每次for循环计算len(t)了。好家伙,快了10倍,学到了学到了!那我们也试试这样到底能快多少呗。

2022-11-03 20:32:54 447

原创 go get安装gin框架失败

而我用的vscode直接新建go文件就直接运行了,没有go.mod文件,问题就在这。于是按照官方文档说明 ,我在当前项目文件夹golang下新建了一个文件夹test,然后创建了一个main.go文件随便写了些go代码,然后在终端执行go mod init golang/test就会发现文件夹栏多了个go.mod!今天用go get安装gin框架失败,第一个报错信息抱歉已经没了。再次用go get安装gin框架,成功辣!在stackoverflow中查看一番发现。明确说了新建项目要创建一个go.mod文件。

2022-11-01 22:07:41 428 1

原创 git clone访问github失败

之前装了git后就一直没管了,但是最近用go get装包的时候发现无法访问github,查了之后才发现go get貌似是通过git下载的,然后我惊奇地发现git clone都失败了!报错原因就是下图所示的访问github失败超时。试了很多网上的办法,大致有:1、但是我使用git config --list发现根本没有proxy,所以问题不出在这2、把https改成http,还是没用3、 在git bash或终端输入下面两行代码还是失败了,但是离解决办法已经很近了!!!

2022-11-01 21:59:29 2216 1

原创 windows下go+vscode

右下角会出现让你安装一下module的弹窗,直接点install all。等待安装完成后,ctrl+s保存文件,然后运行,一定要保存在运行!然后打开Vscode,新建一个hello.go。

2022-10-08 19:20:01 250

转载 Ubuntu环境下安装VSCode以及Golang语言环境

本来想一步步全都写下来的,但是个人比较懒并且写这篇博客的主要目的就是方便自己以后安装,因此如果你哪一步不会可以私信我。需要注意的是Go官方要求要设置代理才能安装 Go Module的包。因此,我们在这一步结束后。

2022-10-08 18:54:49 368

转载 Python星号*的用途总结

看到一篇国外的不错的关于python星号*的总结(全英文,但是词汇很简单)。当然相信基本的像星号解包这种操作各位大神都懂的,所以我只在此放出目录部分以及详述部分比较新颖的部分。

2022-10-07 20:27:33 421

转载 基于范围的for循环

【代码】基于范围的for循环。

2022-10-01 10:27:07 82

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除