profile image

Dorian 的妙妙文档

我要吃麦麦

自托管 Github Actions Runner

在 Linux 系统上,依次执行以下步骤 mkdir actions-runner && cd actions-runner curl -o actions-runner-linux-x64-2.329.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.329.0/actions-runner-linux-x64-2.329.0.tar.gz tar xzf ./actions-runner-linux-x64-2.329.0.tar.gz 然后来到你的仓库 -> settings -> actions -> runners -> Add your self-hosted 可以看到 Configure 部分的指令,执行它们进行登录。会让你输入一些名称之类的,本次教程全部回车,根据自己需要配置 然后我们安装服务 sudo ./svc.sh install sudo ./svc.sh start 这样 runner 就会作为服务在后台

2025年12月11日 · 1 分钟 · 40 字 · Dorianyang

如何为 github actions 创建专用用户

这是为了赋予该用户某些高权限操作,且不会赋予太多权限,保证服务器安全 # 1. 创建用户(无密码,避免本地密码登录) sudo adduser --disabled-password --gecos "" ghactions # 2. 创建 .ssh 目录 sudo mkdir -p /home/ghactions/.ssh # 3. 权限收紧 sudo chown -R ghactions:ghactions /home/ghactions/.ssh sudo chmod 700 /home/ghactions/.ssh 然后为 github actions 创建私钥用于github action 远程登录 # 切换至用户 sudo su ghactions # 生成公私钥 ssh-keygen -t ed25519 -C "github-actions" -f ~/.ssh/id_ed25519 # 查看公钥,复制到剪贴板: cat ~/.ssh/id_ed25519.pub # 切换回原用户 su <原用户名> # 执行赋予权限 sudo bash -c 'echo "这里换成你的公钥内容" >> /home/ghactions/.ssh/authorized_keys' sudo chown ghactions:ghactions /home/ghactions/.ssh/authorized_keys sudo chmod 600 /home/ghactions/.ssh/authorized_keys 为 ghactions 赋予特定操作的权限 ...

2025年12月9日 · 2 分钟 · 234 字 · Dorianyang

常用 docker 镜像命令速查

postgres docker run -d --name postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_DB=postgres -p 5432:5432 -v pgdata:/var/lib/postgresql/data postgres:16 pgvector docker run -d \ --name pgvector-db \ -e POSTGRES_PASSWORD=mysecret \ -p 5432:5432 \ pgvector/pgvector:pg16

2025年12月8日 · 1 分钟 · 32 字 · Dorianyang

2025 11 25_23 46 32

在 obsidian 设置中点击第三方插件,搜索插件 git 然后通过终端进入你的 obsidian 笔记所在目录,初始化一个 git 仓库 然后其实和正常 git 一样,你需要和远程 github 仓库关联。此处不赘述 然后,在插件中开启 也可以根据自己需要修改其他的

2025年11月25日 · 1 分钟 · 16 字 · Dorianyang

哈工大人工智能实验 MNIST 预测

代码获取请单击此处 HIT_AI_Intro_Exp 快速开始 1. 数据集准备 我们从网络上下载 MNIST_data 数据集,解压后放在文件夹下,可以看到分为训练集和测试集两部分 2. 训练模型 首先,你需要在电脑上安装 uv 工具(如果你熟悉 conda 也可以)。uv 安装随便去网上搜搜教程就行 拥有 uv 后,请你运行 uv --version 如果显示了版本则说明 uv 正常安装了 然后运行以下命令,安装所需要的 Python 包(如果你用过 conda 就是安装 requirenments.txt 里面的包,请使用 python 3.10) uv sync 我们安装的是以下包,最重要的是 mindspore 训练框架 然后训练我们的模型。命令为 uv run train.py --ckpt_path ./ckpt 可以看到训练开始了,显示每一轮以及损失 最终我们看到ckpt/下有一系列检查点,这些也就是我们训练得到的模。,最后一个 4-10 也就是第 10 个 epoch 得到的模型,最完整的模型 3. 评估模型 我们使用最后一个 checkpoint 得到的模型来使用 test 数据集进行评估 uv run eval.py --ckpt_path ckpt/checkpoint_lenet_4-10_1875.ckpt 运行如下图 可以看到精度 98.88%,还是很不错的。接下来我们将使用图片真实的从使用角度测试该模型 ...

2025年11月17日 · 1 分钟 · 132 字 · Dorianyang

使用 MLX 在 Apple M 芯片进行 Lora 微调

苹果加油,和 CUDA 碰一碰 数据准备 从 github 克隆 Apple 给出的示例项目项目 git clone https://github.com/ml-explore/mlx-examples.git 在项目lora/data/中放置你的训练、验证和测试集数据 下载一个模型。此处我们从modelscope下载一个小模型minimind2 pip install modelscope modelscope download --model gongjy/MiniMind2 下载后,记住模型的路径。此处我的路径如下 环境配置 使用 uv 初始化一个环境 $ uv init --name mlx . -p3.13 Initialized project `hypollm` at `/Users/dorian/Documents/Programme/NUS311/model_test` 你也可以使用conda $ conda create -n mlx python==3.13 安装所需的包 $ uv add mlx-lm transformers torch numpy 微调过程 进入项目路径 cd /mlx_example/lora/。如果不使用 swanlab 就删除最后一个 arg $ mlx_lm.lora --model <此处你的基座模型路径> --train --data ./data --report-to swanlab # 显示如下则成功 # Loading pretrained model # Loading datasets # Training # Trainable parameters: 1.654% (1.720M/104.031M) # Starting training..., iters: 1000 # Calculating loss...: 100%|██| 25/25 [00:07<00:00, 3.42it/s] 微调结束后,可以看到如下内容,是 checkpoints 和最终模型 然后我们进行融合权重 $ mlx_lm.fuse --model <你的基座模型路径> --adapter-path adapters --save-path <你的模型名字> 最终得到以下文件 模型部署 下载 Ollama(麻烦自行查找并下载) 新建一个Modelfile,注意没有后缀,内容如下(也可以参考此网站) FROM <模型文件夹的绝对路径> # 推理参数(适合精确结构推理) PARAMETER temperature 0.2 PARAMETER top_p 0.8 PARAMETER top_k 50 PARAMETER repeat_penalty 1.05 PARAMETER num_ctx 4096 PARAMETER num_predict 512 # 对齐 Qwen 格式的多轮对话模版 TEMPLATE """<|im_start|>system {{ .System }}<|im_end|> <|im_start|>user {{ .Prompt }}<|im_end|> <|im_start|>assistant """ # 设定系统指令 SYSTEM "You are an expert in causal inference and graph theory." 利用 ollama 创建 $ ollama create <模型名字> -f <Modelfile位置> 运行 $ ollama run <模型名字> 这篇博客也很好 https://juejin.cn/post/7426343844595335168

2025年10月28日 · 1 分钟 · 180 字 · Dorianyang

模型训练踩坑合集

确定模型层数 python -c "import torch; ckpt = torch.load('full_sft_512.pth', map_location='cpu'); print('模型键:', ckpt.keys() if isinstance(ckpt, dict) else 'direct tensor'); print('\n层数统计:'); [print(k) for k in (ckpt.keys() if isinstance(ckpt, dict) else [])]" 50 系显卡 cuda 和 pytorch 不兼容问题,升级到最新 cu129 pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu129

2025年10月28日 · 1 分钟 · 43 字 · Dorianyang

Flutter 学习笔记

本笔记基于该教程, 让我们说谢谢 Google 写着感觉和 ArkTS 和 Kotlin 很像 PS:如果你使用 Windows,请将所有 ⌘ (Mac 上的 Command 键)视为 Ctrl 键 Flutter环境配置 按照 flutter brew install flutter 安装 VSCode(其他的也行)插件 安装 xcode xcode-select --install 创建一个新项目 F1 -> flutter new -> Application->填项目名称,选路径 替换以下内容 pubspec.yaml name: 你的项目名称 description: A new Flutter project. publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.1+1 environment: sdk: '>=2.19.4 <4.0.0' dependencies: flutter: sdk: flutter english_words: ^4.0.0 provider: ^6.0.0 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 flutter: uses-material-design: true 替换 analysis_options.yaml (用于代码分析器) include: package:flutter_lints/flutter.yaml linter: rules: prefer_const_constructors: false prefer_final_fields: false use_key_in_widget_constructors: false prefer_const_literals_to_create_immutables: false prefer_const_constructors_in_immutables: false avoid_print: false 替换lib/main.dart,经典的面向对象语言 import 'package:english_words/english_words.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => MyAppState(), child: MaterialApp( title: 'Namer App', theme: ThemeData( useMaterial3: true, colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange), ), home: MyHomePage(), ), ); } } class MyAppState extends ChangeNotifier { var current = WordPair.random(); } class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { var appState = context.watch<MyAppState>(); return Scaffold( body: Column( children: [ Text('A random idea:'), Text(appState.current.asLowerCase), ], ), ); } } 运行这个新项目 停留在 main.dart 上,选择当前的目标运行平台(右下角) 我这里选了 Mac,然后点击运行标志,结果报错了在 stackoverflow 找到xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH。如果装了 Xcode APP 版本,进入 Settings->Locations,改一下 command line tools 的路径 再运行,还是报错 运行 flutter doctor -v,发现没装 cocoapods。运行brew install cocoapods即可 再运行,还是一样的报错。在这里找到原因,有人就是因为被 iCloud 文件提供器加了 com.apple.fileprovider.fpfs#P 才一直失败,- 任何打包进 .app 的文件只要带有资源分叉或 Finder 信息,CodeSign 都会拒绝。所以我把项目移出了 iCloud 同步的文件夹,然后清理资源重新运行 # 1) Flutter 清理 + 移除构建输出 flutter clean rm -rf build/macos # 2) 删除 Xcode 派生数据 rm -rf ~/Library/Developer/Xcode/DerivedData/* # 3) 递归清理整个项目树的扩展属性(包含将来要进 .app 的一切) xattr -rc . # 4) 若你从网上下过三方二进制/压缩包,顺便去掉隔离标记 xattr -dr com.apple.quarantine . # 5) 重新预拉取 macOS 引擎构件(避免 SDK 自身产物带脏属性) flutter precache --macos # 6) 重新构建 flutter run -d macos 这次成功了,弹出了我们的 APP 再试试 iOS 平台,右下角构建平台选择 ios simulator再打开 lib/main.dart ,点击右上角运行标志,等待一会也可以正确显示 热重载 我们修改文字,并按 ⌘+S,可看到程序中的文字发生了变化(注意 Web 平台不支持) 添加一个按钮 我们继续修改,修改以下内容 ...

2025年10月23日 · 9 分钟 · 1865 字 · Dorianyang

纯小白怎么装 Python 环境

写在开头 无论什么目的,我都建议你使用 uv 来安装 python。有很多人也会选择 conda,但我认为 uv 相对更好一些。如果有人给你发了一个 yaml,叫你复制这个环境,那一般是用 conda。。但是对于新项目,我建议你使用 uv,不过它有一定学习成本,需要记忆命令 uv 安装 python教程 对于 mac,安装 homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 然后一路回车确认就行 等待 brew 安装好,我们运行brew install uv 等待 uv 安装好,我们进入我们的项目的路径的,然后运行 uv init --name my-app . -p3.12,3.12 替换为你自己需要的 python 版本,my-app 替换为你想要的项目名称 然后,你就成功得到了一个环境。以下是一些常用命令及与普通 python 命令映射 传统 Python 命令 uv 对应命令 说明 python script.py uv run script.py 在 uv 管理的环境中运行脚本,自动处理虚拟环境和依赖。 pip install package uv add package 在项目中添加依赖。uv 会更新 pyproject.toml 和锁定文件。 pip uninstall package uv remove package 从项目中移除依赖。 python -m venv .venv / source .venv/bin/activate (隐式)uv 管理 .venv 或环境 uv 在初始化或第一次 uv add 时会自动建立环境,不必手动激活。 virtualenv venv / venv venv uv venv uv 提供创建虚拟环境的命令(传统 workflow 的一部分) pip freeze > requirements.txt / pip install -r requirements.txt uv lock(生成锁文件) + uv sync(安装) uv 用锁文件(uv.lock)替代 requirements.txt,确保可重复环境。 python setup.py sdist bdist_wheel / twine upload dist/* uv build + uv publish 项目打包与发布流程由 uv 提供。 pipx / python -m uvx 或 uv tool run 用于一次性运行或安装 CLI 工具包,uv 提供 “tool” 子命令流程。 pyenv install 3.x / pyenv local 3.x uv python install 3.x +项目配置 uv 支持管理 Python 版本,自动下载并切换。 pip install -e . / python setup.py develop uv tool install . -e 或 uv add –editable . 开发安装项目(使其在系统可用/可运行)使用 uv 的 “tool install” 或项目安装流程。 conda 安装教程 安装 mambaforge(就是 conda)brew install mambaforge,根据指引回车 运行conda init zsh或者conda init bash(根据你的终端类型) 创建一个环境 conda create -n py311 python=3.11,py311 替换名称,3.11 替换 python 版本 激活这个环境conda activate py311,然后你就可以正确地运行常规的 python 命令(比如 pip 等)

2025年10月19日 · 2 分钟 · 219 字 · Dorianyang

React 遇到的一些知识(Adding...)

字段 ellipsis 意思是 columns 中的当单元格中内容太长,显示… const columns: ColumnsType<FileInfo> = [ { title: '文件名', dataIndex: 'file_name', key: 'file_name', ellipsis: true, render: (text: string) => <Text strong>{text}</Text>, }, { title: '文件大小', dataIndex: 'file_size', key: 'file_size', width: 120, render: (size: number) => formatFileSize(size), }, { title: '上传时间', dataIndex: 'uploaded_at', key: 'uploaded_at', width: 180, render: (date: string) => formatDateTime(date), }, { title: '操作', key: 'actions', width: 220, render: (_, record: FileInfo) => ( <Space size="small"> <Button type="link" icon={<EyeOutlined />} onClick={() => handlePreview(record)} > 预览 </Button> <Button type="link" icon={<DownloadOutlined />} onClick={() => handleDownload(record)} > 下载 </Button> <Button type="link" danger icon={<DeleteOutlined />} onClick={() => handleDelete(record)} > 删除 </Button> </Space> ), }, ]; 移动端页面出现偏移 (我们使用 tailwindcss) 在index.css中,用 vite 构建的 react 应用 body 包含两个 css 属性 ...

2025年10月16日 · 2 分钟 · 277 字 · Dorianyang