把工作作为一种方法

1
你能遇到pua你的人,都是身边的所谓聪明人,拥有那么一点智慧,一点权利。他们常用的话术是:你能力这么强,肯定可以搞定这个难题;大家都是一条线上的蚂蚱,千万不要退缩;

有时候高帽子带上去就很难摘下来,毕竟你不想伤了与领导之间的和气,所以伤了自己的情绪,最终上了裁员名单的时候,才发现hr不和你讲和气。

每个人都在被其他人毒害,然后自己再去毒害更弱势的他人。更不幸的是,不经意还让自己的家人也惨遭毒手。

2
渣男对待女朋友和同事,出奇的保持一致。

3
从现在起,就要记录那些工作中、生活中难以忍受的时刻,分析为何这个时刻如此难以忍受,是谁?什么行为造成这种感受。浪费别人的时间,就是谋财害命,以前总觉得是鲁迅的一种修辞,或者比喻而已,昨天才切实理解到,“就是”谋财害命,当这个SB销售把会议当作自己建立个人关系,展现个人魅力的时候,就是在谋害所有参加会议的人的生命。

新机器安装docker和python3

安装docker

root@instance-20230906-1618:~# docker --version
Command 'docker' not found, but can be installed with:
snap install docker         # version 20.10.24, or
apt  install podman-docker  # version 3.4.4+ds1-1ubuntu1.22.04.2
apt  install docker.io      # version 24.0.5-0ubuntu1~22.04.1
See 'snap info docker' for additional versions.

服务器的版本是

root@instance-20230906-1618:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

安装完成后,少了一点空间

267 MB of additional disk space will be used

安装python3的container

其实我可以使用python3的虚拟机,但是因为最近使用docker比较顺手,所以打算尝试下

  • 希望在这个容器里,安装与llm有关的插件、向量数据库等等
  • 或者在这台机器上安装其他的容器,例如关系数据库、向量数据库或者其他组件,实现一个简单的微服务价格,最好也可以用k8s管理

安装python最新版本,python:3

docker pull python:3

启动docker,而且进入交互(i)和终端模式(t),这里有个小问题,启动容器后会自动进入终端模式,我不是很喜欢这样,所以应该去掉t这个参数

docker run -it --name python3-container python:3

进入docker,使用terminal编写执行脚本,可以看到容器里的python和宿主机的python,版本是不一致的。

root@instance-20230906-1618:~# docker exec -it python3-container /bin/bash
root@e6d7fd5c9e79:/# python --version
Python 3.11.5
root@e6d7fd5c9e79:/# pip --version
pip 23.2.1 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)
root@e6d7fd5c9e79:/# exit
exit
root@instance-20230906-1618:~# python3 --version
Python 3.10.12
root@instance-20230906-1618:~# pip --version
Command 'pip' not found, but can be installed with:
apt install python3-pip

LangChain初探

需求来源与问题提出

大模型,特别是公有云的超大参数模型,例如70B、130B的模型,往往不会针对特定的领域知识进行微调,原因既有模型自身训练成本的问题,也和把控领域数据的客户有关,他们不愿意共享自己的数据;

私有化部署的大模型,是否就不存在这样的问题呢?不尽然,虽然私有化部署避免了数据回流的安全问题,但是目前阶段,没有那个客户会接受一次训练的成本(软件、硬件和调优服务),何况所谓训练数据的标注也是一个漫长、昂贵的过程。

最近我参与的若干政府项目就遇到了类似难题。

而langchain、向量数据库就能形成一套很好的方案。

原来的问题是:大模型不太行,回答不了我提出的问题;
现在的问题是:你的问题有点烂,没有利用好大模型。

方案的基本思路

专业问题+外挂领域知识库+通用大模型=专业问题+领域大模型

  1. 一个简单的例子
请问XXX
  1. 一个复杂的例子
请问XXX

LangChain介绍

加拿大学校和专业选择

信息来源

  • 学校官网,alerba大学官网信息组织的更有效率,u get what u want,calgary大学就比较活泼,但是信息组织较为混乱
  • redit,关注了/ucalgary and /ualberta,明显albeta大学的群更活跃、更卷,也让你在不上学的情况下,有一种置身室内的体验
  • youtube,质量较高,广度深度都有覆盖,但是偏重国际学生体验,英文资源中印度中介很多
  • b站,可以有视觉体验,极少数up主质量很高
  • 知乎,有一些靠谱介绍,不过可疑的留学中介也很多
  • 一亩三分地app,post数量较少,这两所大学都不是热门

阿尔伯塔省大学选择

在阿省,目前看只能在UOA和UOC之间选择,都是综合性大学

  • UA综合排名靠前,加拿大前五,CS比UC要强?
  • UA和国内交流多,相比UC的轻松氛围,UA要卷很多,不过研究生可以申请去美国名校
  • UC学历不被国内承认,因为曾经给XX发过奖?
  • 似乎CS比CE要难
  • theis似乎有难度,会拖延毕业
  • coop是加分项;
  • UC的Geomatics专业北美排名第一(堪比兰州大学的冰川专业在中国的尴尬地位)
  • UC可以节省房费。每天骑自行车上课即可,不过远离家庭,也是上大学的价值之一

大二选专业的问题

如果是择优录取,GPA的成绩可能会逐渐提高,导致学业压力非常大,2019年UT-cs有4个人跳楼;

CS和CE的区别

计算机科学(Computer Science,简称 CS)

是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。

计算机科学包含很多分支领域;有强调特定结果的计算机图形学;也有探讨计算问题性质的计算复杂性理论;研究方向侧重不同,比如编程语言理论是研究描述计算的方法,而程序设计是应用特定的编程语言解决特定的计算问题,人机交互则是专注于怎样使计算机和计算变得有用、方便等等。这其中四个领域最为关键,分别是理论,编程语言,算法,数据构架。

计算机科学非常依赖于数学基础,学习偏向以软件为主,对数学、算法、计算、模型等能力要求较高。计算机科学非常适合数学能力突出的学生。

在加拿大大学里,计算机科学专业一般开设在理学院下,作为一门理科专业。但也有学校将其开设在数学院下,比如滑铁卢大学。

计算机工程(Computer Engineering,简称CE)

是硬件和软件的结合,学生不仅仅要学习计算和编程,还要学习物理和电子电路这些知识。从本源上说,计算机工程是计算机科学和电子工程的交叉学科专业。因此,它更关注微处理器如何工作、设计以及优化,需要考虑如何在电子元件之间实现有效传输数据;如何设计电子元件的综合系统、如何处理软件内指令以及如何针对特定的硬件平台编写、编译和优化软件。计算机工程师更加专注于硬件和集成设备的开发和设计。

计算机工程对于数学上的要求可能不如计算机科学那么高,但是对物理上的要求显然是更多的。主要学习的内容包括但不限于现代物理学原理,电子电路设计,计算机架构与设计,大规模集成电路,微处理器设计和接口,嵌入式计算机系统设计,数字信号处理,人工智能与机器人等等。

在加拿大大学里,计算机工程开设在工程学院,申请时不仅仅要求学生具备很好的数学基础,对高中理科课程也非常看重,其中物理成绩是最为重要的。

参考
知乎链接
阿大programs列表
The choice of universities in Alberta

在oracle免费云上部署wordpress

据说只要5-10分钟就可以实现wordpress+mysql,而且是容器部署形式,不过我等了10分钟不止,响应界面已经吊死了。

帮助文档介绍可以使用terraform这个管理工具,参考链接如下:
Create your own web presence with Oracle Cloud Infrastructure using WordPress

Oracle Cloud solution is really simple architectures which is show belowed picture.

Oracle免费云服务-永远免费

云服务现状-ARM与x86

目前提供ARM架构云服务器的厂商,只有amzaon和oracle,谷歌和微软暂时没有计划

  • amazon的AWS采用Graviton处理器
  • oracle cloud采用Ampere架构处理器

ARM是什么

ARM,全称为Advanced RISC Machine,是英国Acorn有限公司设计的一款低功耗、低成本RISC微处理器。1983年ARM架构问世,成本低、功耗小,是轻型便携设备‌理想选择,如手机、笔记本和平板等。

ARM vs x86

X86是Intel研发的一种微处理器体系结构的泛称,它采用的是CISC(全称是Complex Instruction Set Computers,即复杂指令集计算机),以增加处理器本身复杂度作为代价,去换取更高的性能,但集成的指令集数量越来越多,给硬件带来的负荷也就越来越大,无形中增加了功耗和设计难度。

于是,RISC(全称Reduced Instruction Set Computers,即精简指令集计算机)诞生了,其设计初衷便是通过精简指令系统减少硬件设计的复杂程度,提高指令执行速度。在RISC中,无论简单还是复杂的操作,均由简单指令的程序块完成,因此在性能上RISC可能有所不如,但在功耗上RISC却比CISC低很多。

所以,可以这样通俗的理解,CISC的代表为X86架构,而RISC的代表则为ARM架构,ARM与X86的区别就是RISC与CISC的区别。

Ampere A1机型优势

Ampere A1提供每CPU80核的Ampere Altra处理器,所有的核都能够以3.0GHz的最高频率稳定运行,每个核都有自己的64KB L1 指令高速缓存、64KB L1数据高速缓存和高达1MB L2 数据高速缓存,并提供可预测的性能

在基于行业标准的SPECrate2017 Benchmark测试中,Ampere A1实例的性价比是其他ARM服务器实例的2.5倍,而比较起基于x86的英特尔Skylake或AMD Naples实例来说,Ampere A1实例的性价比更是其4倍以上。与OCI的高性能云架构相结合,基于Ampere Altra处理器的Ampere A1在云中提供了最好的性价比。

灵活的CPU和内存配比

OCI为客户提供三种基于ARM的计算选择:灵活虚机、强大裸金属以及专用区域Cloud@Customer,分别适用于有不同需求的客户。

OCI独有的、灵活的CPU和内存配比方式,能支持企业选择任意数量的CPU核数(1-80核)和内存(1-512GB)来满足企业的工作负载需求,而不再局限于选择具有4个、8个或16个核以及每个核的静态内存比率的固定虚机(VM)大小。这种灵活性使客户能够构建更好地匹配工作负载需求的VM,从而在优化成本的同时获得最佳性能。

线性可伸缩性和可预测的性能

性能对于云端的工作负载至关重要。Ampere Altra处理器旨在云中所需的规模下提供可预测的性能,其处理器的单线程核则能确保任何时候资源都不会被抢占。因此,对于特定的云端工作负载,这些基于ARM的CPU并不依赖通过超频来实现更高的性能,其能持续3.0GHz的最大频率并提供可预测的性能。同时,Altra的单线程内核和缓存设计还确保了随着内核数量的增加,性能几乎呈线性增长。这尤其有利于计算密集型工作负载,如媒体编码、加密、AI推断和HPC

永远免费的OCI

All Oracle Cloud Infrastructure accounts (whether free or paid) have a set of resources that are free of charge for the life of the account. These resources display the Always Free label in the Console (for Ampere A1 Compute shapes, see Compute).

Using the Always Free resources, you can provision a virtual machine (VM) instance, an Oracle Autonomous Database, and the networking, load balancing, and storage resources needed to support the applications that you want to build. With these resources, you can do things like run small-scale applications or perform proof-of-concept testing.

选择合适的os镜像和cpu数量/型号

远程无法ping通是被墙了吗

这时候发现直接ping公网地址,是无法ping通的,不管从阿里云还是本地使用vpn的笔记本,这是由于安全列表里没有开通icmp的权限,如下操作后就可以ping通了,不过稍后要删除这条规则。

使用密钥登陆服务器

首先进入私钥存储的目录,修改文件权限为只读

chmod 400 <private_key_file>

然手使用ssh -i命令登陆远程服务器,由于使用了ubuntu的镜像文件,这里的用户名就是ubuntu,如果没有和私钥在同一目录下,也需要把目录地址一起带上

ssh -i <private_key_file> <username>@<public-ip-address>

参考信息
腾讯
Oracle官网
墨天轮介绍OCPU实例开通

初探minikube

  1. dashboard
    使用一条简单命令,就可以启动dashboard服务,不过这个服务是构建在docker里的,所以在os里,使用systemctl 没法显示出来。

    如果要查看k8s管理的服务有哪些,可以使用如下命令
k8s@MDaliyun:~$ kubectl get namespaces

显示所有namespaces

将本地电脑的12345端口映射到远程服务器的对应端口(-L参数–本地,-R参数–远程),执行后需要输入k8s这个用户的密码.
这里需要解释一下:

  • 通用命令是:ssh -L 本地ip:本地端口:目的ip:目的端口 user@server_ip
  • 当源ip就是本机时,可以省略,如果需要绑定同一个局域网的另外一台机器时,就要把源ip写上,例如192.169.1.2.
  • 目的ip,是我们要映射的server的127.0.0.1,也就是localhost,当然,也可以是与映射server同一个局域网的其他机器,例如172.0.0.10,或者域名地址(需要私网域名解析)
  • 当然,这就带来一个非常大的好处,比如我们在远程服务器上,如果有一个docker服务需要暴露8080端口时,如果采用ssh映射方式,就不需要云服务器开通安全组了。
ssh -L 12345:localhost:12345  k8s@server_ip 

执行成功后,打开下面的链接,就可以使用本地浏览器管理dashboard了

http://127.0.0.1:12345/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/namespace?namespace=default

如果要暂停dashboard的服务,没有stop之类的命令,可以采用资源降级、删除对应namesapce、

k8s@MDaliyun:~$ kubectl scale deployment kubernetes-dashboard -n kubernetes-dashboard --replicas=0
deployment.apps/kubernetes-dashboard scaled

删除pod相关资源后,本地浏览器的dashboard呈现菊花状态

ssh隧道映射也就失效了

  1. http service

  2. 其他命令
    获取更详细的pod资料

k8s@MDaliyun:~$ kubectl describe pods -n kubernetes-dashboard
Name:             dashboard-metrics-scraper-5dd9cbfd69-tz9xq
Namespace:        kubernetes-dashboard
Priority:         0
Service Account:  kubernetes-dashboard
Node:             minikube/192.168.49.2
Start Time:       Wed, 30 Aug 2023 17:04:26 +0800

从minikube到portainer

下午原计划从b站的“三小时学会k8s”入手,没想掉入portainer的坑,还好一切顺利

portainer

portainer是一个非常轻量化的docker管理工具,图形化界面,支持ubuntu,安装过程如下

  1. 首先建立一个docker的专门目录 docker_project,进入目录
    mkdir portainer

  2. 在portainer目录下,建立一个docker compose可以使用的yml文件:
    nano docker-compose.yml
    文件内容如下,其中8083是宿主机的端口号,需要请云主机管理员帮你打开权限:

    version: '3'
    services:
      portainer:
        image: portainer/portainer-ce
        container_name: portainer
        ports:
          - "8083:9000"
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - portainer_data:/data
    volumes:
      portainer_data:
    
    
  3. 使用如下命令,上面的yml文件相当于定义了portainer service的启动配置,也就是使用‘portainer/portainer-ce’的镜像文件,并绑定到8083端口上(9000是容器的端口),而且创建了portainer data卷。使用docker-compose 命令启动portainer容器
    docker-compose up -d

  4. 好了,使用浏览器进入本地或者你的远程服务器地址:8083,就可以对服务器上的docker进行管理。

minikube

  1. 首先安装kubectl,这是一个用来管理k8s集群的命令行工具,对于管理部署、services、pods和其他资源非常关键,在ubuntu的默认包里是没有的,所以需要从k8s官方repo里下载最新版本。

    sudo apt install curl
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    chmod +x kubectl
    sudo mv kubectl /usr/local/bin/
    
    

    上述命令下载最新kubectl后,修改其属性为可执行,然后把它移动到path目录以便可以从terminal里执行。
    然后对安装结果进行校验

    kubectl version --client
    

    下面是巨坑时刻,折腾了1个小时,因为dl.k8s.io在google上,总是下载失败,所以按照chatgpt建议打算替换如下国内镜像:

        https://dl.k8s.io
    
    curl -LO "https://mirrors.ustc.edu.cn/kubernetes/apt/dists/kubernetes-jessie/release/$(curl -L -s https://mirrors.ustc.edu.cn/kubernetes/apt/dists/kubernetes-jessie/release/stable.txt)/bin/linux/amd64/kubectl"
    
    curl -LO "https://mirrors.aliyun.com/kubernetes/$(curl -L -s https://mirrors.aliyun.com/kubernetes/stable.txt)/bin/linux/amd64/kubectl"
    
    KUBE_VERSION=$(curl -L -s https://mirrors.cloud.aliyuncs.com/kubernetes/stable.txt)
    curl -LO "https://mirrors.cloud.aliyuncs.com/kubernetes/${KUBE_VERSION}/bin/linux/amd64/kubectl"
    
    curl -L -s https://mirrors.cloud.aliyuncs.com/kubernetes/stable.txt
    
    https://mirrors.aliyun.com/kubernetes/
    https://mirrors.ustc.edu.cn/kubernetes/
    

    当然还是失败,最终多问了几次chatgpt,按照如下方式安装成功

    sudo apt update
    sudo apt install snapd
    

    Once you have snapd installed and the system restarted (if necessary), you can now install kubectl using snap:

    sudo snap install kubectl --classic
    kubectl version --client
    

    minikube start

    What you’ll need
    2 CPUs or more
    2GB of free memory
    20GB of free disk space
    Internet connection
    Container or virtual machine manager, such as: Docker, QEMU,    Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware   Fusion/Workstation
    

    都是钱

    尽量不要使用root账号

    这时候要注意,如果从portainer后台启动minikube的容器,实际是没有运行起来的

    使用none root用户启动minikube

    成功!

    docker run -d -p 8081:80 docker/getting-started

参考
https://www.xtuos.com/214719.html
不使用用docker compose来安装portainer:https://www.jianshu.com/p/ce225a5bfbd1

在m1电脑上重新安装brew并更新系统

MacBook使用笔记:安装Homebrew(M1)(https://zhuanlan.zhihu.com/p/372576355)

作者 | 公众号:程序员的一天

一、Homebrew是什么?

Homebrew官网:

英文:
https://brew.sh
中文:
https://brew.sh/index_zh-cn
Homebrew是MacOS(或 Linux)的软件包管理器。

通过它,我们可以方便的对Mac上的各种应用软件进行管理,例如:安装、更新、查看、搜索、卸载等。

Homebrew,可谓是Mac神器,几乎每一位Mac使用者都会安装它。

用Homebrew官网的一句话总结:

Homebrew 使 macOS(或您的 Linux 系统)更完整。

二、Mac上安装Homebrew

Homebrew 3.0.0版开始,正式支持Apple M1芯片,M1用户放心安装!
第一步:

打开终端。不知道如何打开终端的朋友,请参考:

爱码士:MacBook使用笔记:打开终端
45 赞同 · 2 评论文章

第二步:

在终端命令行窗口输入安装命令。

这里需要特别说明几点内容。

下面是Homebrew官方给出的安装命令:(如果没有VPN,不要使用此命令安装!)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
通常情况下,官网给出的指令会报错:

curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
因为这是国外网站,由于GFW(中国长城防火墙)的存在,如果没有vpn,是无法访问的,所以连接被拒绝!

别着急,有办法解决!

只要我们从国内镜像网站安装,就一切OK了。

以下为国内安装Homebrew的正确姿势:(基于gitee上某大神的自动安装脚本)

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
回车执行指令后,根据提示操作。具体包括以下提示操作:

(1)选择下载镜像

根据需要选择下载源,例如,我这里选择中科大下载源,就输入‘1’,回车。

(2)确认删除旧版本

如果存在旧版本,会弹出删除旧版本提示,输入"Y",回车。

(3)输入开机密码(用于mac确认第三方应用安装)

(4)安装git

如果之前没有安装过git,会终止homebrew安装,弹出git安装提示,点击“安装”。

(5)再次执行homebrew安装指令

耐心等待git安装完成后,再次运行homebrew安装指令,重新根据提示操作即可。

安装需要一段时间,过程中,可以在终端看到脚本执行了那些操作。

(6)验证是否安装成功

安装脚本执行完成后,重启终端。(重启后才生效)

通过在终端输入"brew -v",可以查看homebrew版本。

如果正确输出版本信息,表示成功安装。

虽然叫做’Homebrew’,但实际使用时,命令是’brew’。
qiuxiannv@qiuxiannvdeMBP ~ % brew -v
Homebrew 3.1.7-42-gd45832b
Homebrew/homebrew-core (git revision 09d1a8b385; last commit 2021-05-15)
Homebrew/homebrew-cask (git revision c1dad4a5cf; last commit 2021-05-15)
qiuxiannv@qiuxiannvdeMBP ~ %
在M1芯片上,homebrew的安装路径为:"/opt/Homebrew/"
三、Homebrew卸载

如需卸载,使用指令:

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
如果有用,点个赞吧~

END
发布于 2021-05-16 01:16