首页 文章 精选 留言 我的

精选列表

搜索[AI可见性],共10000篇文章
优秀的个人博客,低调大师

FauxPilot —— 可本地托管的 GitHub Copilot 服务

这是一个本地托管版本的 GitHub Copilot。它在英伟达的 Triton 推理服务器中使用了 SalesForce CodeGen 模型和 FasterTransformer 后端。 前提条件 Docker docker-compose >= 1.28 一台计算能力大于 6.0 的英伟达 GPU,以及足够的 VRAM 来运行你想要的模型 nvidia-docker curl 和 zstd,用于下载和解包模型 Copilot 插件 你可以配置官方 VSCode Copilot 插件来使用你的本地服务器。只要编辑你的 settings.json 来添加。 "github.copilot.advanced": { "debug.overrideEngine": "codegen", "debug.testOverrideProxyUrl": "http://localhost:5000", "debug.overrideProxyUrl": "http://localhost:5000" } 设置 运行设置脚本以选择要使用的模型。 这将从 Huggingface 下载模型,然后将其转换为与 FasterTransformer 一起使用。 $ ./setup.sh Models available: [1] codegen-350M-mono (2GB total VRAM required; Python-only) [2] codegen-350M-multi (2GB total VRAM required; multi-language) [3] codegen-2B-mono (7GB total VRAM required; Python-only) [4] codegen-2B-multi (7GB total VRAM required; multi-language) [5] codegen-6B-mono (13GB total VRAM required; Python-only) [6] codegen-6B-multi (13GB total VRAM required; multi-language) [7] codegen-16B-mono (32GB total VRAM required; Python-only) [8] codegen-16B-multi (32GB total VRAM required; multi-language) Enter your choice [6]: 2 Enter number of GPUs [1]: 1 Where do you want to save the model [/home/moyix/git/fauxpilot/models]? /fastdata/mymodels Downloading and converting the model, this will take a while... Converting model codegen-350M-multi with 1 GPUs Loading CodeGen model Downloading config.json: 100%|██████████| 996/996 [00:00<00:00, 1.25MB/s] Downloading pytorch_model.bin: 100%|██████████| 760M/760M [00:11<00:00, 68.3MB/s] Creating empty GPTJ model Converting... Conversion complete. Saving model to codegen-350M-multi-hf... =============== Argument =============== saved_dir: /models/codegen-350M-multi-1gpu/fastertransformer/1 in_file: codegen-350M-multi-hf trained_gpu_num: 1 infer_gpu_num: 1 processes: 4 weight_data_type: fp32 ======================================== transformer.wte.weight transformer.h.0.ln_1.weight [... more conversion output trimmed ...] transformer.ln_f.weight transformer.ln_f.bias lm_head.weight lm_head.bias Done! Now run ./launch.sh to start the FauxPilot server.

优秀的个人博客,低调大师

PoCL 3.1 发布,可移植的 OpenCL 库

Portable OpenCL (pocl) 是一个高效的 OpenCL 标准实现,提供易移植的 OpenCL 实现。该项目另外一个目的是通过编译器优化实现性能的提升,减少人工优化的步骤。 目前 PoCL 3.1 发布了,此版本带来如下改动: 提供与 LLVM/Clang 15.0 版本的兼容性 所有通过 POCL_DEVICES 控制平台设置的设备名称都改为小写 自定义设备驱动程序(以前称为 Accel,现在称为 AlmaIF)的重大返工,支持更多实现 AlmaIF 的设备类型 大大改进了 SPIR-V 对 CPU 和 CUDA 驱动程序的支持 改进了在 WIP Vulkan 驱动程序中实现完整 API 的步骤 cl_khr_command_buffer 的基本实现 PoCL Vulkan 驱动程序依赖于 libvulkan 和 clspv,目前已经针对开源 Mesa Vulkan 驱动程序进行了测试。该驱动程序目前实现了大部分 Vulkan 1.2 API,但 OpenCL 图像支持、命令缓冲区无缓存和其他缺失元素尚未处理完毕。 完整的变更可查看 Change Logs 。

优秀的个人博客,低调大师

Google 开源 Paranoid,可识别加密漏洞

Google 近日正式开源了 Paranoid ,这是一个用于识别加密制品(cryptographic artifacts)中常见漏洞的项目。 Paranoid 支持测试多个加密制品,其中包括如数字签名、通用伪随机数和公钥,以识别由编程错误或使用弱的专有随机数生成器造成的问题。 根据 Google 官方公布的信息显示,Paranoid 可以检查任何制品,甚至是那些由未知实现的系统(Google 将其称之为 “黑盒子”,其源代码无法被检查)生成的制品。 一个制品可能是由黑盒子生成的,它不是由我们自己的工具(如 Tink)生成的,也不是由我们可以使用 Wycheproof 检查和测试的库生成的。虽然不够安全,但不幸的是,有时我们最终会依赖黑盒子生成的制品 Google 已经使用 Paranoid 检查了 Certificate Transparency(CT)中的加密制品 —— 其中包含超过 70 亿个已签发的网站证书,并发现了数千个受关键和高严重性 RSA 公钥漏洞影响的证书。这些证书中的大多数已经过期或被吊销。 Google 将该库开源,不仅是允许其他人使用,也是为了增加透明度,并接受来自外部的贡献。希望研究人员发现并报告加密漏洞后,将检查添加到库中。这样一来,Google 和其他使用者就可以快速应对新的威胁。 Paranoid 项目包含 ECDSA 签名以及 RSA 和 EC 公钥的检查,并由 Google 安全团队积极维护。该项目还旨在减轻对计算资源的使用。检查的速度必须足够快,以便针对大量的制品运行,并且必须在现实世界的生产环境中有意义。 项目地址:https://github.com/google/paranoid_crypto

优秀的个人博客,低调大师

PoCL 3.0 发布,可移植的 OpenCL 库

Portable OpenCL (pocl) 是一个高效的OpenCL标准实现,提供易移植的开源实现。该项目另外一个目的就是通过编译器优化实现性能的提升,减少人工优化的步骤。 PoCL 3.0发布了,该版本支持最小的 OpenCL 3.0 功能集,提供了最初的 OpenCL 3.0 支持意味着 POCL 可通过 LLVM 在 CPU 或其他后端执行,例如针对 AMD HSA、NVIDIA GPU 和其他加速器。 除了解决 OpenCL 3.0 之外,PoCL 3.0 还添加了 LLVM/Clang 14.0 API 兼容性、改进的跟踪和可视化、支持生成专门的工作组函数、修复了 SPIR-V printf 支持以及其他修复/改进。 更多内容可在更新公告中查看。

优秀的个人博客,低调大师

NPM包可窃取浏览器密码

近日,研究人员发现官方NPM库中的软件包可以从Chrome web浏览器窃取保存的密码。 NPM 是Node.js的包管理器,共有超过150万个包,每个月的下载量超过300亿次。研究人员分析发现,NPM中包含不同类型的可执行文件,包括PE、ELF、MachO等。 研究人员分析发现nodejs_net_server包的多个版本中都具有恶意行为。通过这些包的metadata数据分析发现该文件的原始名为a.exe,位于lib文件夹中。研究人员进一步分析发现a.exe是一个ChromePass工具,用来恢复Chrome web浏览器中保存的密码。 图1: ChromePass工具 该工具本身并不是恶意的,但是可以用于恶意目的。比如,该包使用它来执行恶意密码窃取和凭证窃取。虽然该密码恢复工具有图形用户接口,但是恶意软件作者好像更喜欢用命令行工具。 图2: nodejs_net_server NPM包 NPM的 nodejs_net_server包页面表明该包的最新版本为v1.1.2,大约6个月前发布。该包的URL主页指向一个GitHub地址。该包的开发者为chrunlee,是GitHub的活跃开发者,GitHub账号中含有一个web链接:hxxps://chrunlee.cn 。 图3: chrunlee的 github页面 NPM版本历史表明该包一共发布了12个版本,总下载次数为1283次。 表 1: nodejs_net_server版本 有意思的是发布的1.1.1和1.1.2版本中包含了测试ChromePass工具的结果。这些登录凭证信息保存在相同文件夹的a.txt文件中, 因为密码恢复工具名为a.exe。 文本文件中包含2020年3月到2020年12月创建的282个登录凭证信息。图4可以看出恶意软件作者并没有遵循密码的最佳安全实践。 图4: 恶意软件作者从浏览器中恢复的密码 另外,恶意软件作者还通过类似单词(typosquatting)诱使受害者执行恶意包。恶意软件作者使用与主流包类似名的包来诱使用目标安装包。本例中,恶意软件作者使用了不同的方式来滥用npm包的配置选项。 NPM包在package.json 配置文件中的bin 域来PATH路径安装一个或多个可执行文件。包安装后,NPM会将该文件软链到prefix/bin文件夹(全局安装)或./node_modules/.bin/ 文件夹(本地安装)。这些可执行文件可能会被分配给任意名,如果相同名字的模块存在,就会覆写和映射到恶意软件提供的脚本。 NPM下载数据表明该包已经被下载超过3.5万次数。该包在Node.js开发者社区也是非常流行的,在过去7天内下载量超过1000次。该包车位劫持目标的另外一个原因是测试执行时是以命令行形式而非JS文件模块的形式。 图 5: 滥用package.json中的bin域来执行劫持 包安装和成功劫持后,恶意软件还会通过将 lib/test.js 脚本安装为Windows服务的形式来实现驻留。 图6: 驻留Windows服务安装 该服务会打开一个socket来监听7353端口的命令。支持的命令包括逆向host和端口配置、目录内容监听、文件查询、文件上传、shell命令执行、屏幕和摄像头录制。浏览器密码窃取是通过之前下面的ChromePass 工具的shell命令执行实现的。 图7: 创建监听socket 该包的主页和GitHub仓库链接目前都指向不存在的web页面。查看恶意软件开发者chrunlee发布的其他NPM包发现了一个同样没有链接的包。该包名为tempdownloadtempfile,只在2019年6月发布过1个版本。其中只包含 package.json 和file/test.js文件。file/test.js文件实现了nodejs_net_server 包中实现的相同的远程shell功能,但该包并不执行劫持也没有驻留机制。 本文翻译自:https://blog.secure.software/groundhog-day-npm-package-caught-stealing-browser-passwords如若转载,请注明原文地址。

优秀的个人博客,低调大师

Google Docs漏洞可窃取私有文档截图

包括Google Docs在内的许多谷歌产品都有"Send feedback"或"Help Docs improve"的选项,允许用户发送包含截图的反馈来改善产品。该反馈特征部署在谷歌的主网www.google.com,并通过iframe元素集成在其他域名中,在iframe元素可以从feedback.googleusercontent.com 加载弹窗内容。 试想我们使用Google Docs (https://docs.google.com/document) 并提交一个反馈。点击Help--> Send Feedback 后,就可以看到弹出的弹窗加载了文档的截图。Iframe的源(www.google.com) 与Google docs (docs.google.com)是不同的,因此要成功提交该截图必须要进行跨域通信。实际上,Google docs会通过postmessage发送每个像素的RGB值给www.google.com,然后再通过postmessage重定向这些RGB值到其iframe feedback.googleusercontent.com,然后从像素的RGB值渲染图像,并将base64编码的数据URI发送回主iframe。 这一过程完成后,要写一个feedback的描述,并点击发送描述和图像到https://www.google.com。 研究人员Sreeram在消息发送到feedback.googleusercontent.com的过程中发现了一个安全漏洞,攻击者利用该漏洞可以修改frame未任意的外部网站,因此,可以窃取和劫持要上传到谷歌服务的Google Docs截图。 漏洞产生的原因是Google Docs域名缺乏X-Frame-Options header,因此有可能修改消息的目标源(target origin),并利用页面和frame的跨域通信来实现攻击。 该攻击是需要用户交互的,比如点击“send feedback”按钮,漏洞利用可以获取要上传的截图并窃取和发送到恶意站点。攻击者只需要将Google Docs文件嵌入到虚假/恶意网站的iframe就可以劫持feedback弹窗来重定向内容到攻击者控制的域名。 POC视频参见:https://www.youtube.com/embed/isM-BXj4_80 更多技术细节参见:https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/ 本文翻译自:https://thehackernews.com/2020/12/a-google-docs-bug-could-have-allowed.html 【责任编辑: 赵宁宁 TEL:(010)68476606】

优秀的个人博客,低调大师

如何判断算法是否有可优化空间?

❝ 【GiantPandaCV导语】计算Armv7a架构理论gflops以及自己写的某个算法的gflops的方法,另外提供了一个脚本可以显示native版矩阵乘法各个尺寸对应的gflops。 ❞ 1. 前言 之前一直在写一些算法怎么优化,包括算法逻辑甚至是更加底层一些的文章,但是测试工作都做得比较随意,也就是粗略的比较时间。最近准备学习一下矩阵乘法的优化,觉得这种比较方式实际上是看不出太多信息的,比如不知道当前版本的算法在某块指定硬件上是否还存在优化空间。因此,这篇文章尝试向大家介绍另外一个算法加速的评判标准,即算法的浮点峰值(gflops)。 ❝ gflops代表计算量除以耗时获得的值。 ❞ 之前高叔叔发了一篇文章教会我们如何计算硬件的浮点峰值(https://zhuanlan.zhihu.com/p/28226956),高叔叔的开源代码是针对x86架构的。然后,我针对移动端(ArmV7-a架构)模仿了一下,在测出硬件的浮点峰值之后,手写了一个Native版的矩阵乘法并计算这个算法的gflops,以判断当前版本的算法离达到硬件浮点峰值还有多少优化空间。 2. Cortex-A17 硬件浮点峰值计算 详细原理请查看:浮点峰值那些事 。这里再截取一下计算浮点峰值的操作方法部分: 来自https://zhuanlan.zhihu.com/p/28226956 所以参考这一方法,即可在移动端测出浮点峰值,首先写出测试的核心代码实现,注意gflops的计算方法就是用计算量除以程序耗时: #include<time.h>#include<stdio.h>#defineLOOP(1e9)#defineOP_FLOATS(80)voidTEST(int);staticdoubleget_time(structtimespec*start,structtimespec*end){returnend->tv_sec-start->tv_sec+(end->tv_nsec-start->tv_nsec)*1e-9;}intmain(){structtimespecstart,end;doubletime_used=0.0;clock_gettime(CLOCK_MONOTONIC_RAW,&start);TEST(LOOP);clock_gettime(CLOCK_MONOTONIC_RAW,&end);time_used=get_time(&start,&end);printf("perf:%.6lf\r\n",LOOP*OP_FLOATS*1.0*1e-9/time_used);} 注意这里的TEST是使用了纯汇编实现,即test.S文件,代码如下,为什么一次循环要发射10条vmla.f32指令,上面截取的计算方法部分讲的很清楚,这个地方也可以自己多试几组值获得更加精细的硬件FLOPs: .text.align5.globalTESTTEST:.loop2:vmla.f32q0,q0,q0vmla.f32q1,q1,q1vmla.f32q2,q2,q2vmla.f32q3,q3,q3vmla.f32q4,q4,q4vmla.f32q5,q5,q5vmla.f32q6,q6,q6vmla.f32q7,q7,q7vmla.f32q8,q8,q8vmla.f32q9,q9,q9subsr0,r0,#1bne.loop2 我在Cortex-A17上测试了单核的浮点峰值,结果如下: 测试结果 然后大概知道了硬件的浮点峰值,我们在优化自己的算法时就至少心中有数了。 3. 实现Native矩阵乘法,记录浮点峰值 接着,我们参考https://github.com/flame/how-to-optimize-gemm来实现一个Native版的矩阵乘法,即A矩阵的一行乘以B矩阵的一列获得C矩阵的一个元素(计算量为2 * M * N * K),并统计它的运算时间以计算gflops,另外为了发现矩阵乘法的gflops和矩阵尺寸的关系,我们将各个尺寸的矩阵乘法的gflops写到一个txt文件里面,后面我们使用Python的matplotlib库把这些数据画到一张图上显示出来。首先实现不同尺寸的矩阵乘法: #defineA(i,j)a[(i)*lda+(j)]#defineB(i,j)b[(i)*ldb+(j)]#defineC(i,j)c[(i)*ldb+(j)]//gemmC=A*B+CvoidMatrixMultiply(intm,intn,intk,float*a,intlda,float*b,intldb,float*c,intldc){for(inti=0;i<m;i++){for(intj=0;j<n;j++){for(intp=0;p<k;p++){C(i,j)=C(i,j)+A(i,p)*B(p,j);}}}} 测试和统计FLOPs部分的代码比较长,就贴一点核心部分吧,完整部分可以到github获取(https://github.com/BBuf/ArmNeonOptimization/tree/master/optimize_gemm): //i代表当前矩阵的长宽,长宽都等于ifor(inti=40;i<=800;i+=40){m=i;n=i;k=i;gflops=2.0*m*n*k*1.0e-09;lda=m;ldb=n;ldc=k;a=(float*)malloc(lda*k*sizeof(float));b=(float*)malloc(ldb*n*sizeof(float));c=(float*)malloc(ldc*n*sizeof(float));prec=(float*)malloc(ldc*n*sizeof(float));nowc=(float*)malloc(ldc*n*sizeof(float));//随机填充矩阵random_matrix(m,k,a,lda);random_matrix(k,n,b,ldb);random_matrix(m,n,prec,ldc);memset(prec,0,ldc*n*sizeof(float));copy_matrix(m,n,prec,ldc,nowc,ldc);//以nowc为基准,判断矩阵运行算结果是否正确MatrixMultiply(m,n,k,a,lda,b,ldb,nowc,ldc);//循环20次,以最快的运行时间为结果for(intj=0;j<20;j++){copy_matrix(m,n,prec,ldc,c,ldc);clock_gettime(CLOCK_MONOTONIC_RAW,&start);MatrixMultiply(m,n,k,a,lda,b,ldb,c,ldc);clock_gettime(CLOCK_MONOTONIC_RAW,&end);time_tmp=get_time(&start,&end);if(j==0)time_best=time_tmp;elsetime_best=min(time_best,time_tmp);}diff=compare_matrices(m,n,c,ldc,nowc,ldc);if(diff>0.5f||diff<-0.5f){exit(0);}printf("%d%le%le\n",i,gflops/time_best,diff);fflush(stdout);free(a);free(b);free(c);free(prec);free(nowc);}printf("\n");fflush(stdout); 「在编译之后运行时只需要新增一个重定向命令,即可获得记录了矩阵大小和GFlops的txt文件,例:./unit_test >> now.txt, 注意now.txt需要自己先创建,并保证它有可写的权限。」 接下来我们使用下面的脚本将now.txt用图片的方式显示出来,并将图片保存到本地: importmatplotlib.pyplotaspltimportnumpyasnpdefsolve(filename):f=open(filename)sizes=[40]times=[0.0]title='origin'whileTrue:line=f.readline()ifline:slices=line.split("")iflen(slices)<=2:break;size=int(slices[0])time=float(slices[1])sizes.append(size)times.append(time)returntitle,sizes,timesif__name__=='__main__':plt.xlabel('size')plt.ylabel('gflops')t,x,y=solve('now.txt')plt.plot(x,y,label=t)plt.legend()plt.savefig('origin.png')plt.show() 我们来看一下结果: Native版矩阵乘法的gflops 从这张图可以看到,在矩阵长宽取100的时候可以达到最高的gflops大概是0.25gflops,相对硬件的理论浮点峰值只有2-3%,所以此算法的优化空间还是非常巨大的,接下来我们就可以使用如减少乘法次数,内存对齐,分块等策略去改进这个算法获得更好的gflops。这样,我们在算法优化的过程中就可以更加直观的看到算法的性能。 4. 小结 这篇文章只是矩阵优化部分的开篇,主要是受到高叔叔的文章启发给对移动端或者PC端感兴趣的同学提供一个gflops的计算实例,并提供一个将gflops更加直观显示的脚本工具,希望对大家有用。 5. 参考 https://zhuanlan.zhihu.com/p/65436463 https://zhuanlan.zhihu.com/p/28226956 https://github.com/flame/how-to-optimize-gemm 欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧ 有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信: 二维码 为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。 公众号QQ交流群 本文分享自微信公众号 - GiantPandaCV(BBuf233)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

云下载 Windows 10 指日可待

未来的 Windows 10 系统更新可能可以让人们使用存储在云中的系统镜像来重新安装操作系统。 向内部人士发布的 Windows 10 build 18950 中已经对 BootUX(boot user experience,启动时的用户体验)做了更新,并提供了两个重新安装 Windows 的选项:1)云下载;2)本地重装。 ▲推特用户 WalkingCat 透露了这一消息 不过,Windows 10 build 18950 是 Windows 10 20H1 开发分支的一部分,尚不可供用户使用。 外媒softpedia猜测,这一功能最终可能会在 Windows Lite 上提供。Windows Lite 据称是 Windows 的轻量级版本,人们认为它将在教育领域与谷歌的 Chrome OS 竞争,尽管断断续续浮现出不少猜想和线索,微软至今尚未发布关于它的公告或是发布日期,一切都还是未知数。 另一方面,云下载功能也许会在 Windows 10 的完整版本中提供,当然,这仍然有待观察。 毋庸置疑,云是大势所趋。你会因为这一新的转变选择 Windows 10 吗? 消息来源:https://news.softpedia.com/news/future-windows-10-version-could-allow-reinstalling-from-the-cloud-526877.shtml

优秀的个人博客,低调大师

commonsware-Android平台可复用代码仓库

http://www.chengyunfeng.com/2010/07/commonsware CommonsWare是一个Android教学组织,他们在github上的代码库中包含了很多Android平台常用功能的实现代码和一些教程.例如: cwac-adapter: 是一个AdapterWrapper ColorMixer是一个用来选择颜色的组件 cwac-bus: 提供一个跨程序的消息机制 cwac-cache: 提供程序的缓存实现机制. cwac-custmenu:示例如何自定义菜单,并且可以配置菜单的位置 . cwac-endless:一个 EndlessAdapter,这是一个自动分页的List,当用户浏览到List的最后一行的时候自动请求新的数据. 更多组件请参考项目主页. CWAC主页:http://commonsware.com/cwac 源代码地址:http://github.com/commonsguy 本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/818921,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册