无管理员权限软件安装
约 1767 个字 307 行代码 预计阅读时间 10 分钟
没有
sudo权限,就这样从源码编译直到厌烦
1 基本环境
升级 Ubuntu 系统
以 20.04 => 22.04 为例
-
保持 SSH 会话活跃
-
启用 screen 服务
-
修改配置
/etc/ssh/sshd_config,追加以下内容 -
重启 SSH 守护进程
-
-
升级软件、安装依赖
-
编辑
/etc/update-manager/release-upgrades,确保以下字段设置 -
开始升级
Azure 升级完之后会丢掉公钥,得用密码登录后重新传一遍
SSH 连接简化
还在为连接服务器得输入一长串 username / host / port 信息而烦恼吗?
请去霍霍 ~/.ssh/config 这个文件,如果没有的话就 touch 一个出来
Host [HostAlias] # 用于 ssh HostAlias 简化连接
HostName [IP / URL]
User [UserName]
Port [PortNum] # 非默认端口时需要配置
IdentityFile [path2privateKey] # 存在多个私钥时,指定私钥
现在,你可以用通过 ssh [HostAlias] 命令进行一键连接了
存储占用查看
-
所有文件
-
磁盘使用情况
df -h -
剩余磁盘空间
df -hl
-
-
当前路径
-
占用内存的总量
du -sh -
各子目录/文件分别占用的内存容量:
du -sh ./*该命令 不会 显示隐藏文件夹,可以尝试用
du -sh ./.*救一下
-
新增普通用户
-
创建新用户(自动复制
/etc/skel中的基本配置文件) -
设置密码(可选)
-
配置 SSH 公钥
2 开发环境
bypy(百度网盘下载)
-
安装
-
授权:随便输入一个命令,比如
bypy info,随后会出现一个百度网盘登录网址 => 复制粘贴登录后获得的 token,敲击回车即可 -
基本操作
bypy能够同步的数据位于我的应用数据/bypy下bypy help # 显示帮助(基本都能在这里看) bypy list # 列出网盘上对应位置下的所有文件 ## 上传 bypy upload [localpath] [remotepath] [ondup] # 上传文件/递归上传路径 bypy syncup [localdir] [remotedir] [deleteremote] # 上传本地的整个文件夹 ## 下载 bypy downdir [remotedir] [localdir] # 递归下载指定路径 bypy downfile <remotefile> [localpath] # 下载指定文件 bypy download [remotepath] [localpath] # 下载指定文件/递归下载路径 bypy syncdown [remotedir] [localdir] [deletelocal] # 把远程所有东西拉下来其中,下载可以通过指定
--downloader aria2进行加速(可以通过conda install aria2安装) -
报错处理
-
Slice MD5 mismatch(小文件没问题,见 Issue#741)-
原因:
bypy默认会在文件上传后执行 MD5 校验(比较本地计算和百度服务器回传结果),但百度方面的实现变了 -
解决:建议该用 BaiduPCS-Go
-
VSCode
持续显示 “正在下载服务器”
# 1 获取 commit id
cd ~/.vscode-server/bin
ls # 如果有多个就 rm -rf * 再重新开一下本地的 VSCode
# 2 下载对应版本的 VSCode Server
wget \
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable \
-O vscode-server-linux-x64.tar.gz
# 3 解压
tar -zxf vscode-server-linux-x64.tar.gz
# 4 重命名
mv vscode-server-linux-x64 ${commit_id}
重启 VSCode 远程连接窗口,然后摆脱命令行神教吧
Miniconda
具体方式可以参照 文档,这边选用了比较手动的方式
这玩意儿不支持挪动路径(安装路径已经硬编码进去了)
若不慎清空 ~/.bashrc, 可以通过 ./bin/conda init 重新初始化
-
在比较方便的位置创建一个名为
miniconda3的文件夹 -
下载安装脚本
-
运行安装脚本
-
删除脚本文件
找不到 Pip
-
下载
get-pip脚本 -
运行脚本,安装
Pip
Hugging Face
Huggin Face 的主干库分为三部分:
-
Transformer 模型库
可通过以下命令引入 & 校验版本号,从而验证是否成功安装
-
Dataset 数据集库:提供了下载 & 预处理
-
Tokenizer 分词库:将 Seq 转换为 ID 序列
加载 Tokenizer 的时候需要传与预测模型一致的 name(每个预测模型均对应了单独的 Tokenizer)
以
bert-base-chinese的使用为例
模型下载
下载支持两种方式:
-
手动下载:在 链接 中找到 Files 选项卡(但好像得把里面的文件全都下过来 ...)
-
通过官方命令行工具下载:需要额外安装依赖,以及得注册登录(需要用到 token)
用于下载的脚本import os from huggingface_hub import snapshot_download # 设置国内镜像 os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" model_name = "google-bert/bert-base-chinese" while True: # 防止断联 try: snapshot_download( repo_id=model_name, local_dir_use_symlinks=True,# 在local-dir指定的目录中都是一些“链接文件” ignore_patterns=["*.bin"], # 忽略下载哪些文件 # 实际此处不能忽略 .bin(不然只有 tensorflow 权重) local_dir='./model', # 储存路径 token="*******", # huggingface的token resume_download=True ) break except: pass
分词器
-
简单编码器(
tokenizer.encode)-
BERT 只接受一次输入 1 或 2 个句子
-
由于人为设置
maxLen=30,所以每句话都会被 Pad 到len=30(超出被截断)
from transformers import BertModel, BertTokenizer # load from local tokenizer = BertTokenizer('./model/vocab.txt') # use Tokenizer sentences = [ '窗前明月光', '疑是地上霜'] outputs = tokenizer.encode( text=sentences[0], text_pair=sentences[1], truncation=True, # > maxLen, cut padding='max_length', # pad => maxLen add_special_tokens=True, max_length=30, return_tensors=None ) print(tokenizer.decode(outputs)) """ 开头标识为 [CLS]、结尾为 [SEP],填充的统一为 [PAD] [CLS] 窗 前 明 月 光 [SEP] 疑 是 地 上 霜 [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] """ -
-
增强编码器(
tokenizer.encode_plus)支持指定返回的 tensor 类型、token 的标识类型、mask 类型、特殊标识类型、返回长度 etc
# use Tokenizer sentences = [ '窗前明月光', '疑是地上霜'] outputs = tokenizer.encode_plus( text=sentences[0], text_pair=sentences[1], truncation=True, padding='max_length', add_special_tokens=True, max_length=30, return_tensors=None, # 可选 tf: tensorflow, pt: pytorch, np: numpy, None return_token_type_ids=True, # 1st Sentence & special_token = 0, 2nd Sentence = 1 return_attention_mask=True, # padding = 0, else = 1 return_special_tokens_mask=True, # special_token = 1, else = 0 return_length=True # 返回长度 ) for k,v in outputs.items(): print(k,';', v) # 若选择 return_tensors='pt' ,这一步会 bug print(tokenizer.decode(outputs['input_ids'])) -
批量编码器(
tokenizer.batch_encode_plus)一次一句/两句的编码还是太慢了,我们能不能搞点批发(能的)
主要是将传入参数
(text, text_pair)修改为batch_text_or_text_pairssentences = [ '窗前明月光', '疑是地上霜', '举头望明月', '低头思故乡'] outputs = tokenizer.batch_encode_plus( # 定义了 两个 Single+ 一对 Pair batch_text_or_text_pairs=[ sentences[0], (sentences[1], sentences[2]), sentences[3] ], truncation=True, padding='max_length', add_special_tokens=True, max_length=30, return_tensors=None, return_token_type_ids=True, return_attention_mask=True, return_special_tokens_mask=True, return_length=True ) for k,v in outputs.items(): print(k,';', v) for idx in range(len(outputs['input_ids'])): print(tokenizer.decode(outputs['input_ids'][idx]))
字典编辑
BertCN 在训练时是以 单个汉字 作为 token 的、这回导致一些词语被拆开
我们可以通过在词典中增加 token 来解决这一问题
tokenizer = BertTokenizer('path/to/vocab.txt')
vocabDict = tokenizer.get_vocab() # 包含 token + special_token
tokenizer.add_tokens(new_tokens=['月光']) # 普通 token
tokenizer.add_special_tokens({ # 特殊 token
'eos_token': '[EOS]'
})
3 DBMS
MySQL
-
下载:请至 官网 选择合适版本,此处选用 v5.7.29
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.29-linux-glibc2.12-x86_64.tar # 解压 & 重命名 tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar # 报 gzip: stdin: not in gzip format 可以改成 -xvf,得到: # - 主程序:mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz (<- 继续处理这个) # - 测试套件:mysql-test-5.7.29-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql -
编写配置文件:将 $INSTALL_PREFIX 替换为实际安装路径
因为 MySQL 不会扫描自定义路径下的配置文件,最好创建在 HOME 目录下:
~/.my.cnfmysql/my.cnf[client] port=3336 socket=$INSTALL_PREFIX/mysql/mysql.sock [mysqld] port=3336 basedir=$INSTALL_PREFIX/mysql datadir=$INSTALL_PREFIX/mysql/data pid-file=$INSTALL_PREFIX/mysql/mysql.pid socket=$INSTALL_PREFIX/mysql/mysql.sock log_error=$INSTALL_PREFIX/mysql/error.log server-id=100 lower_case_table_names=1 # 设置大小写不敏感 -
安装:不打印任何消息即为安装成功,此处的 USER_NAME 为系统用户名
-
启动服务
-
获取初始密码:
-
随机密码在
error.log文件中,可通过以下命令进行查看 -
你可以在登录后通过以下 SQL 指令进行修改
-
-
报错处理
-
若通过
mysql -u [User] -p登录报错:Command 'mysql' not found,则将$INSTALL_PREFIX/mysql/bin加入环境变量$PATH -
登录报错:
Can't connect to local MySQL server through socket '/tmp/mysql.sock'最好通过
mysql --print-defaults检验一下客户端配置是否生效(打印为空说明未生效)-
临时:指定连接使用的 socket 文件
-
长期:先 kill 掉所有 mysql 相关进程,然后把
my.cnf挪到 HOME 目录后重启服务
-
-
SQLite3
SQLite 依赖于 gcc 和 make,请确保已经安装
-
下载源码
-
编译并安装到指定目录
# 创建安装目录 => 之会清理 mkdir -p $INSTALL_PREFIX/sqlite3 # 在解压路径下编译静态库 gcc -o sqlite3 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 \ -I. shell.c sqlite3.c -lpthread -lm -ldl mkdir -p $INSTALL_PREFIX/sqlite3/include mkdir -p $INSTALL_PREFIX/sqlite3/lib cp sqlite3 $INSTALL_PREFIX/sqlite3/bin/ # 复制可执行文件 # [可选] 编译共享库 gcc -shared -fPIC -o libsqlite3.so sqlite3.c -lpthread -ldl cp sqlite3.h $INSTALL_PREFIX/sqlite3/include/ cp libsqlite3.so $INSTALL_PREFIX/sqlite3/lib/ -
编辑环境变量
PostgreSQL
-
下载安装包并解压
-
配置安装路径
-
编译:该命令将在
$INSTALL_PREFIX/bin下生成/bin & /share -
添加环境变量(以支持直接通过
psql命令进行连接) -
初始化数据库(集群)
其中,参数
-D用于指定 DB 存储路径(必填),-U用于指定管理员用户名(默认为当前的系统用户名),-W用于指定管理员账户密码(默认为空) -
启动服务
-
连接数据库
-
当用户名并非
postgres时,将报错database doesn't exist -
需要先连接至
psql postgres,随后创建其他数据库
-
PGLoader
最麻烦的一集
-
本体安装三部曲(倒是简单)
-
剩下会有千奇百怪的依赖报错,看下面几个小节吧
SBCL
-
最终选择 v2.1.0 版本进行安装
- 这东西对本地的 GCC 版本有要求,最新版要求
glibc >= 2.32 pgloader需要的DEFINE-ALIEN-CALLABLE要求sbcl >= 2.1.10
- 这东西对本地的 GCC 版本有要求,最新版要求
-
可能的报错:
Unable to load libsybdb.solibsybdb.so是 FreeTDS 库的一部分,需要全装上# 下载 wget -c http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz tar -zxvf freetds-stable.tgz # 安装 cd freetds-0.91 ./configure 、 --prefix=$INSTALL_PREFIX/freetds \ --with-tdsver=8.0 --enable-msdblib make && make install # 添加到环境变量 LD_LIBRARY_PATH="$INSTALL_PREFIX/freetds/lib:$LD_LIBRARY_PATH" -
本体安装
LibPQXX
-
下载源码
libpqxx对 g++ 版本有一定要求,可以通过git checkout [Version]进行切换 -
试一下 configue + 安装
-
设置环境变量(但 LD 好像一直找不到)
注意一下格式,在
~/.bashrc里需要加" -
安装验证
-
可能会报错:
No package 'libpq' found -
从 PostgreSQL 源码进行编译(仅 客户端
libpq部分) -
将
libpq安装到指定目录此时:
libpq头文件安装在 (1) 中指定目录的include下libpq库安装在 (1) 中指定目录的lib/libpq.so
-
配置环境变量
-
验证是否可用
4 换源
4.1 Pip
-
创建配置文件
-
写入清华源
-
验证
4.2 Conda
-
Conda 的配置文件是
~/.condarc,可以先通过以下命令备份为.condarc.bak: -
写入清华源
channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ # 如需 PyTorch - defaults # 保留 defaults, 避免某些包在镜像中缺失 show_channel_urls: true ssl_verify: true -
验证