分类 Tech Insight 下的文章

这篇文章翻译自Ollama的博客文章,而文章内容则也是转载,最原始的文章没找到,因此就直接翻译了转载。

文章主要讲通过在 VS Code 或者 JetBrains 中使用 Continue 插件,并配合 Ollama 本地运行的大语言模型,实现在编辑器内使用的 AI 代码助手。主要内容包括1)代码自动补全和聊天、使用嵌入模型实现 @codebase 的 RAG 功能、微调模型并推送 Ollama 以及使用 @docs 功能引用网络内容

注意:文章发表于2024年5月31日,翻译该文的时候 Ollama 和 Continue 以及文章中引用的相关大模型都有不少升级。建议参考文章思路进行有益的尝试。


这是 Continue 联合创始人 Ty Dunn 的一篇客座文章,介绍了如何设置、探索以及找出将 Continue 与 Ollama 结合使用的最佳方法。

ollama-continue.png

Continue 可让您使用开源 LLM 直接在 Visual Studio Code 和 JetBrains 中轻松创建自己的编码助手。所有这些都可以完全在您自己的笔记本电脑上运行,也可以将 Ollama 部署在服务器上,以根据您的需求远程支持代码完成和聊天体验。

您需要安装下列软件以能够继续配置:

一旦您下载并安装好 Continue 和 Ollama,我们建议您探索以下内容

(上面的链接包含安装配置教程,可以参考教程安装,未来可能会有专门文章详细介绍,本文仅限原文翻译)

尝试 Mistral AI 的 Codestral 22B 模型进行自动完成和聊天

到目前为止,Codestral 是我们目前最喜欢的模型,它既能自动完成,又能聊天。该模型展示了 LLM 在编程任务方面的改进。但是,由于它有 22B 参数和非生产许可证,因此需要相当多的 VRAM,只能用于研究和测试目的,因此它可能不是日常本地使用的最佳选择。

  1. 在终端中下载并运行 Codestral 模型:
ollama run codestral
  1. 进入 VS Code,点击 Continue 右下角的齿轮图标打开你的 config.json 并添加

    {
      "models": [
     {
       "title": "Codestral",
       "provider": "ollama",
       "model": "codestral"
     }
      ],
      "tabAutocompleteModel": {
     "title": "Codestral",
     "provider": "ollama",
     "model": "codestral"
      }
    }

    continue-settings-vscode.png

使用 DeepSeek Coder 6.7B 进行自动完成,使用 Llama 3 8B 进行聊天

根据您机器上的 VRAM 容量,您可能能够利用 Ollama 运行多个模型和处理多个并发请求的能力,方法是使用 DeepSeek Coder 6.7B 进行自动完成,使用 Llama 3 8B 进行聊天。如果您的机器无法同时处理这两者,请分别尝试,然后决定您是喜欢本地自动完成还是本地聊天体验。然后,您可以使用远程托管或 SaaS 模型来获得另一种体验。

  1. 在终端中下载并运行 DeepSeek Coder 6.7B,运行方式如下:
ollama run deepseek-coder:6.7b-base
  1. 在另一个终端窗口中下载并运行 Llama 3 8B,运行:
ollama run llama3:8b
  1. 进入 VS Code,点击 Continue 右下角的齿轮图标打开你的 config.json 并添加:
{
  "models": [
    {
      "title": "Llama 3 8B",
      "provider": "ollama",
      "model": "llama3:8b"
    }
  ],
  "tabAutocompleteModel": {
    "title": "DeepSeek Coder 6.7B",
    "provider": "ollama",
    "model": "deepseek-coder:6.7b-base"
  }
}

使用 nomic-embed-text 嵌入和 Ollama 为 @codebase 提供支持

Continue 内置了 @codebase 上下文提供程序,可让您自动从代码库中检索最相关的代码片段。假设您已经设置了聊天模型(例如 Codestral、Llama 3),那么您可以通过 Ollama 和 LanceDB 的嵌入将整个体验保持在本地。截至目前,我们建议使用 nomic-embed-text 嵌入。

  1. 通过运行下面命令,在终端中下载 nomic-embed-text
ollama pull nomic-embed-text
  1. 进入 VS Code,点击 Continue 右下角的齿轮图标打开你的 config.json 并添加:
{
  "embeddingsProvider": {
    "provider": "ollama",
    "model": "nomic-embed-text"
  }
}
  1. 根据代码库的大小,可能需要一些时间进行索引,然后您可以提出问题,重要的代码库部分会自动被找到并在答案中使用(例如“@codebase Llama 3 的默认上下文长度是多少?”)

根据您的开发数据对 StarCoder 2 进行微调并将其推送到 Ollama 模型库

使用 Continue 时,您会自动生成有关如何构建软件的数据。默认情况下,此开发数据会保存到本地计算机上的 .continue/dev_data。当与您最终提交的代码结合时,它可用于改进您或您的团队使用的 LLM(如果您允许)。例如,您可以使用团队接受的自动完成建议来微调 StarCoder 2 等模型,以便为您提供更好的建议。

  1. 将“已接受的标签建议”提取并加载到 Hugging Face 数据集中
  2. 使用 Hugging Face 监督微调训练器对 StarCoder 2 进行微调
  3. 将模型推送到 Ollama 模型库,供您的团队使用并衡量您的接受率如何变化

通过使用 @docs 在 Continue 的帮助下提问,了解有关 Ollama 的更多信息

Continue 还内置了 @docs 上下文提供程序,可让您索引和检索来自任何文档站点的片段。假设您已经设置了聊天模型(例如 Codestral、Llama 3),您可以通过提供 GitHub 上的 Ollama README 链接并提出问题以了解更多信息,从而将整个体验保持在本地。

  1. 在聊天侧栏中输入 @docs,选择“添加文档”,将“https://github.com/ollama/ollama”复制并粘贴到 URL 字段中,然后在标题字段中输入“Ollama”
  2. 它应该可以快速索引 Ollama README,然后您可以向它提问,它会自动找到重要部分并将其用于答案中(例如“@Ollama 我如何运行 Llama 3?”)

云服务器中通过Docker镜像的方式使用Mysql数据库,数据安全考量定期备份数据库到阿里云OSS中

本文主要实现在阿里云ECS服务器中,通过脚本的方式实现将Docker中的Mysql数据库备份到阿里云OSS中。其他云服务商和其他环境的MySQL也可以使用类似的方式。具体方式不再赘述。

环境和工具

  1. 阿里云ECS服务器,安装Ubuntu或任何带有定时任务cron的Linux操作系统
  2. 阿里云OSS bucket和相应访问的账户
  3. 阿里云OSS命令行工具ossutil,可以到这里下载或查看详情
  4. MySQL镜像

具体步骤

开通OSS和相应子账号

  1. 进入阿里云OSS(对象存储)控制台,如果没有开通OSS服务可能会提示权限和开通确认。
  2. 创建bucket/存储桶,输入名字,比如xxxxbackup,记住这个名字以及界面中出现的Endpoint(地域节点),后续会用到。
    WX20220720-115411.png
  3. 创建一个有API的阿里云子账号,并赋予OSS读写权限。记住该账号的API和Secret,后续会用到。帮助文档
    WX20220720-115547.png

下载OSS命令行工具ossutil到本地系统

  1. 通过wget https://gosspublic.alicdn.com/ossutil/1.7.13/ossutil64下载到本地。这里是64位操作系统,32位可以去下载界面查看对应的下载地址。
  2. 增加运行权限:chmod +x ossutil64
  3. 移动到Path中:sudo mv ossutil64 /bin/

编写脚本

这里需要注意docker容器的名称,容器中应该有MYSQL用户名和密码的环境变量;示例中使用的是root作为用户名;另外备份临时文件夹也需要提前使用mkdir建好

脚本内容示例:

#!/bin/sh 

mysql_dump_path=备份文件临时目录,如/var/dbbackup/ 

#oss-config 
oss_endpoint="阿里云OSS Endpoint" 
oss_bucket="阿里云OSS bucket名称" 
oss_accesskeyid="子账号AccessKeyId" 
oss_accesskeysecret="子账号 AccessKey Secret" 
backup_name=`date +%Y%m%d%H%M%S`
cd ${mysql_dump_path} 

# 使用 mysqldump 备份整个数据库到临时文件夹中
# 注意docker修改docker镜像名称,这里是some-mysql
docker exec some-mysql sh -c 'mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --all-databases' > ${backup_name}.sql

# 打包/pack 
tar zcf ${backup_name}.tar.gz ${backup_name}.sql 
rm -f ${backup_name}.sql 

# 备份到OSS
ossutil64 cp ${backup_name}.tar.gz oss://${oss_bucket}/mysql/backup/${backup_name}.tar.gz -f -e ${oss_endpoint} -i ${oss_accesskeyid} -k ${oss_accesskeysecret} 
rm -f ${backup_name}.tar.gz 
echo "备份完成"

将脚本保存至任意一个不错的位置,比如/var/backup/dbbackup.sh,赋予可执行权限:sudo chmod +x /var/backup/dbbackup.sh

试着运行一下脚本文件sudo /var/backup/dbbackup.sh,再去oss控制台该bucket下-文件管理处查看是否有备份文件存入。如果一切没有问题,则就可以加入cron了。

加入cron计划任务

注:如果脚本位置和临时备份文件夹位置是当前用户无法直接编辑的,则应使用一下方法,在系统级别运行计划任务;用户级别会因为权限问题出错

使用你喜欢的编辑器打开/etc/crontab文件,并在文件末尾加上这行:

23 2 * * * root /var/backup/dbbackup.sh

这表示在每天的02:23:00运行我们的备份脚本。

重新启动cron计划任务:sudo service cron reload

在次日2:23分之后检查OSS控制台后台,即可发现整个数据库已经备份到阿里云OSS。

参考

  1. 使用ossutil定时备份自建mysql数据库到阿里云OSS
  2. Cron介绍
  3. docker hub: mysql

2019年能源消费总量:4860.0Mtce = 1.42434936e+20J = 48亿吨标准煤

国土面积:960万平方公里 = 9.6e+12 m2

我国属太阳能资源丰富的国家之一,全国总面积2/3以上地区年日照时数大于2000小时,年辐射量在5000MJ/m2以上。据统计资料分析,中国陆地面积每年接收的太阳辐射总量为3.3×103~8.4×103MJ/m2,相当于24,000亿吨标准煤的储量。

太阳能储量/能源消费总量:24000/48 = 500倍。

如果使用20%转化率的太阳能电池,则为满足2018年一次能源消耗量,则需要9.6e+12 48 / (24,000 20%) = 9.6 万平方公里(1.44亿亩),1%的国土面积。

考虑到中国有大片沙漠戈壁(总面积达130.8万平方千米,约占全国土地总面积的13.6%),所以我建议:

给沙漠和戈壁披上太阳能电池!发电,减少沙尘危害,实现碳中和!

Q&A、答疑:

  1. 这事能赚钱么?
    按照目前市面上的太阳能电池价格和年发电量比例,不能赚钱。但是能极大地降低中国碳排放量,极大减少石油依赖,极大保护中国的环境。而且能带动太阳能电池板研发制造、电力输送、终端产品(电动汽车、电动工业机械等)非常多的产业发展。如果我们走在前头,还能把这些先进的产业链出口全球,赚取知识产权和研发设计等高端附加值。
  2. 这事儿技术上可行吗?

    • 目前中国能源消费总量年均增速在3.4%左右,按照国家「十四五」计划中的「到2030年达到碳排放峰值」,预计我们最多耗能应该在4860.0Mtce * (1 + 3.4%) ^ 11 = 7095 Mtce, 71亿吨标准煤,或者说 207937422000000000000 焦耳
    • 目前市面上太阳能天池的功率面积比大约在200 瓦特/平米, 计算成每年产出的电能和面积比应该是2522880000 焦耳,那么很清楚就知道咱们需要207937422000000000000/2522880000 = 82420654966 平方米 = 82420 平方公里 = 1.23569 亿亩土地。小于上面假设的9.6万平方公里,更小于130.8万平方千米的沙漠戈壁。说明有的是地方装。
    • 目前中国光伏产业是少数处于世界领先位置的产业,而且还有点产能过剩,我们自己用没问题!
    • 电池技术突飞猛进,储能电池价格节节下降,在2018年,最低0.8 元/Wh即可买到!
  3. 大概要花多少钱?

    • 太阳能电板: 这么大规模的采购,单价可以降低到0.5元/W(原价在1元/W左右)。按照最高71亿吨标准煤的年发电量,需要2.07937e+20J/3.1536e+07s = 6.59365e+12 W的装机量,也就是需要3.296825e+12元,即3.296825万亿人民币。还不到2008年中国4万亿振兴计划嘛,咱们现在可比十多年前富强多了!
    • 储能电池:目前最低0.8元/Wh单价,咱们集中采购再降低一点,0.4元/Wh!再按照一天4小时发电量做储能,需要6.59365e+12 W * 4 * 0.4 = 1.05498e+13,即10.5498万亿人民币。看起来这个项目跟电动汽车一样,电池是大头!
    • 土地:沙漠戈壁啥的,基本上可以免费,就算1000元/亩象征性收点钱。1.64841e+13 W的装机量,目前市面上太阳能电池功率占面积比大约200 W/平米, 再留一个10%的面积用来固定,那么需要9.06628e+10 平米 = 1.35926e+8亩,粗略需要1.26亿亩地。看来目前转化率不错,不需要1.38亿亩土地了。1.26亿亩土地,需要1260亿买地。
    • 运送安装:厂家包邮,沙漠全是沙子,他们可以就近建厂。沙漠治理+安装费用算1万元/亩,需要1.26万亿
    • 配送运输:国家电网赚钱的事情,给他们2000亿
    • 其他费用: 1000亿
    • 总费用: 15.5326万亿,十五万亿的能源投资计划出炉了!
  4. 那么多的太阳能电池和储能电池,哪里来?
    太阳能电池需要单晶硅,沙漠里面都是沙,就地取材即可。然后招标10-100个太阳能电池厂干活。另外中国是稀土大国,储能电池所需原料都有,请现在做动力电池的老曹出马,也干个10-100个电池厂搞生产。中国集中力量干大事的能力,毋庸置疑!
  5. 这么大的工程规模,怎么铺设电池,怎么输送?
    国家电网的事情,你能发电,他们就能输电,不操心。
  6. 谁掏钱啊?
    15.5万亿,你让国家突然出这么多也不太好,毕竟2019年国家财政收入才19万亿。我建议用财政收入的5%,即1万亿,在加上社会资本1万亿,每年2万亿投入,8年即可完工!
  7. 晚上怎么办?靠月亮吗?
    电池,储能电池。另外晚上基本上工业用电木有了,再加上水能发电、核能发电等的补充,相信能够满足夜晚供电的需求。
  8. 收益?

    • 碳中和!一个几乎只用可持续的绿色能源的国家,子孙后代不愁环境污染
    • 一个基本上没有石油依存的国家,没人随便能源卡脖子
    • 带动国内相关产业发展,少说带动50万亿产业总量,增加相关就业人口1亿人
    • 相关技术出国国外,从产品制造、到技术研发、到设计服务,高低搭配,应有尽有,赚一堆外汇!

参考

  1. 国家数据 - 能源 - 能源消费量

这里列出一些数据/观点,供大家参考:

  1. statista上面有一个Size of the public cloud platform as a service (PaaS) market worldwide from 2015 to 2022 (更新时间 by Arne Holst, May 4, 2020):
    微信截图_20200609231949.png
  2. businesswire上面Global Platform as a service (PaaS) Market Report 2020 - ResearchAndMarkets.com (December 04, 2019 09:53 AM Eastern Standard Time):

    The global platform as a service (PaaS) market was valued at about $29.58 billion in 2018 and is expected to grow to $52.4 billion at a CAGR of 15.4% through 2022.
  3. Gartner的[Gartner Says Nearly 50 Percent of PaaS Offerings Are Now Cloud-Only]4:

    The total PaaS market revenue is forecast to reach $20 billion in 2019, and to exceed $34 billion in 2022, according to the latest forecast from Gartner.
  4. Planet Market Reports的[Platform-as-a-service PaaS Market 2019 | Global Market Size, Share, Supply, Demand, Segments and Forecast 2024]5:

    The global platform as a service market size will grow by USD 31.4 billion during 2024.

可以看到各方数据/观点相差非常大(1-2倍),如果折中,则2020年全球PaaS市场规模应该在200-400亿美元左右。

这篇文章是机器学习常用基本算法文章的一个索引,具体可以参见具体的文章链接
文章状态 alpha

  1. 决策树 Decision Tree
  2. 随机森林 Random Forest
  3. 逻辑回归 Logistic Regression
  4. 支持向量机 SVM
  5. 朴素贝叶斯
  6. K最近邻算法
  7. K均值算法
  8. Adaboost 算法
  9. 神经网络
  10. 马尔可夫

参考

  1. Kaggle: Learning Machine Learning
  2. CSDN: 轻松看懂机器学习十大常用算法
  3. 伯乐在线: 10 种机器学习算法的要点 (3的翻译)
  4. Essentials of Machine Learning Algorithms
  5. A Tour of The Top 10 Algorithms for Machine Learning Newbies