【无标题】
---
title: 小牛翻译-实训第一天
date: 2026-06-22 16:46:32
tags: 小牛翻译,实训笔记
---
# 小牛翻译-实训第一天
今天主要是配置环境,连接远程ssh,连接实验室的服务器。
先讲讲服务器,有一个root用户,我是组长,我是老师发了一份root的表格,ssh连接的格式和密码,然后我先用adduser创建四个子用户,分别是我的三个组员和我,然后我分别把组员的账号发给他们,让他们分别用自己的账号登录服务器。而且使用最简单的密码。
今天在用vscode连接服务器的时候,死活连不上,
如小牛bug.png所示,就是连不上,解决方法是把Preferences: Open User Settings (JSON) 搜索这个,然后把之前配代理的那个端口给删了
下面这是我今天的实验报告
好的,这是根据您提供的 `report.docx` 内容转换成的 Markdown 格式。我保留了所有标题、问题编号、回答文本和图片引用(图片路径保持不变),并将数学公式用 LaTeX 或文本方式清晰呈现。
---
# 人工智能实训预备课作业报告
---
## Problem (linux1): Understanding Linux and Ubuntu
### (a) Linux 和 Ubuntu 是同一个东西吗?
**答:** 不是一个东西。Linux 是一个开源的操作系统内核,是整个系统的基础;而 Ubuntu 是基于 Linux 内核构建的一个具体发行版,它包含了图形界面、系统工具和软件包管理等功能,是 Linux 内核的一种具体实现形式。
### (b) 为什么人工智能实训课程常使用 Ubuntu,而不是只使用 Windows?
**答:**
首先,在深度学习环境配置方面,Ubuntu 对 CUDA、PyTorch 等主流 AI 框架的兼容性更好,官方文档和社区支持也更丰富;其次,AI 开发通常在远程服务器上进行,Ubuntu 作为服务器操作系统在稳定性、资源占用和远程管理(SSH)方面具有优势;最后,命令行操作更利于批量任务、脚本自动化以及依赖关系的精确控制,便于实验复现。
---
## Problem (vscode1): Connecting to the Ubuntu server
**任务完成情况:** 已在个人电脑上安装 VS Code 和 Remote-SSH 插件,配置 SSH config 并成功连接 Ubuntu 服务器,在远程终端中运行了 `whoami`、`hostname`、`pwd`、`uname -a` 命令。
---
## Problem (vscode2): Local computer or remote Ubuntu?
### (a) VS Code 安装在个人电脑上,为什么可以操作 Ubuntu 服务器中的文件?
**答:** Remote-SSH 插件的作用是在本地 VS Code 与远程服务器之间建立一条基于 SSH 协议的安全通道。插件会将本地的操作指令发送到服务器执行,并将服务器返回的结果(如文件列表、编辑内容)显示在本地界面上,从而让用户感觉像在操作本地文件一样。
### (b) 在远程终端中创建的文件夹,会出现在本地桌面上吗?
**答:** 不会。因为终端连接的是远程 Ubuntu 服务器,所有命令(如 `mkdir`)都是在服务器的文件系统中执行的,与本地个人电脑的文件系统完全隔离。
---
## Problem (shell1): First command-line operations
**任务完成情况:** 在远程 Ubuntu 终端中依次执行了查看目录、回到主目录、创建项目文件夹及子文件夹、查看结果等操作。
**使用的命令(示例):**
```bash
pwd
cd ~
mkdir 2023xxxx_ai_practice # 替换为实际学号
cd 2023xxxx_ai_practice
mkdir data src outputs
ls
```
---
## Problem (file1): Managing a small project directory
**任务完成情况:** 在项目目录下完成了进入 `src`、创建 `hello.py`、写入内容、复制备份、查看内容、删除备份等操作。
**使用的命令(示例):**
```bash
cd src
echo 'print("Hello, Ubuntu!")' > hello.py
cd ..
cp src/hello.py outputs/hello_backup.py
cat outputs/hello_backup.py
rm outputs/hello_backup.py
```
**命令区别说明:**
- **`cp`(copy)**:用于复制文件或目录,原文件保持不变,生成一个新的副本。
- **`mv`(move)**:用于移动文件或目录(剪切)或重命名文件,原路径消失,出现在新路径。
- **`rm`(remove)**:用于永久删除文件或目录,数据不会进入回收站,删除后很难恢复。
---
## Problem (apt1): Installing basic tools
**任务完成情况:** 执行了 `sudo apt update` 更新源,安装 `tree` 工具,并在项目目录下运行 `tree` 查看目录结构。
**截图:**
**`apt` 和 `pip` 的区别:**
- **`apt`** 是 Ubuntu 系统的软件包管理工具,用于安装系统级别的软件(如 Git、Tree、Vim),通常需要 `sudo` 管理员权限。
- **`pip`** 是 Python 的包管理工具,用于安装 Python 第三方库(如 NumPy、Torch),通常安装在当前激活的 Python 环境中,不需要系统管理员权限。两者管理的对象和作用域完全不同。
---
## Problem (miniconda1): Installing Miniconda
**任务完成情况:** 在服务器中找到安装包,使用 `bash` 运行安装,接受许可、默认路径,执行 `conda init`,然后 `source ~/.bashrc`,验证安装,查看环境列表,并关闭自动激活 base。
### (a) 为什么不建议直接把所有依赖安装到 base 环境中?
**答:** base 环境是 Conda 的基础环境,如果将所有项目的依赖都装在里面,不同项目间的库版本(如 PyTorch 2.0 vs PyTorch 1.8)容易发生冲突,导致环境混乱难以排查。为每个项目创建独立环境(如 `ai_infer`)可以实现环境隔离,保证项目的可复现性。
### (b) Miniconda 安装在 Ubuntu 服务器中,还是安装在本地个人电脑中?
**答:** Miniconda 安装在 Ubuntu 服务器中。因为后续的模型推理和代码运行都在远程服务器上执行,依赖库和环境必须部署在服务器上才能使用其 CPU/GPU 资源。
### (c) `source ~/.bashrc` 的作用是什么?
**答:** `~/.bashrc` 是 Bash Shell 的配置文件,包含了环境变量、别名和启动脚本等设置。`source ~/.bashrc` 的作用是让当前终端重新加载该文件,使新添加的 Conda 初始化配置立即生效,从而让系统识别 `conda` 命令。
---
## Problem (conda1): Understanding Conda and pip
### (a) Conda 环境解决了什么问题?
**答:** Conda 环境解决了 Python 项目中的依赖冲突问题。如果没有环境隔离,在同一个 Python 环境中同时安装项目 A(需要 Django 3.0)和项目 B(需要 Django 4.0)会导致版本冲突。Conda 允许我们为每个项目创建独立的“沙箱”环境,各自拥有独立的 Python 解释器和库版本,互不干扰。
### (b) `pip install` 安装的包一定属于整个 Ubuntu 系统吗?
**答:** 不一定。`pip install` 安装的包会安装到当前激活的 Python 环境中。如果在某个 Conda 环境(如 `ai_infer`)中执行 `pip install`,包会被安装到该 Conda 环境的 `lib/python3.x/site-packages/` 目录下,仅对该环境可见,不会影响 Ubuntu 系统自带的 Python 环境,也不会影响其他 Conda 环境。只有在未激活任何虚拟环境、直接使用系统 Python 时,`pip` 才会将包安装到系统目录(通常需要 `sudo` 权限)。
### (c) 请解释 Ubuntu、Miniconda、Conda environment、pip 之间的层级关系。
**答:** Ubuntu 是最底层的操作系统,提供基础运行环境;Miniconda 是安装在 Ubuntu 上的环境管理工具,用来创建和管理隔离的 Python 工作空间;Conda environment 是 Miniconda 创建的独立虚拟环境,每个环境拥有自己的 Python 版本和库集合;pip 是 Python 的包安装工具,在某个 Conda environment 内部使用时,它安装的 Python 库只会归属于该特定的 Conda environment,从而形成“操作系统 → 环境管理工具 → 独立虚拟环境 → 包安装工具”的清晰层级结构。
---
## Problem (env1): Building a Conda inference environment
**任务完成情况:** 创建了 `ai_infer` 环境(Python 3.10),激活,检查版本,安装 `numpy` 和 `torch`,验证导入,并用 `which python` 确认环境。
**如何判断进入正确的 Conda 环境:**
可以通过两种方式判断:第一,观察终端提示符,如果显示 `(ai_infer)` 前缀,说明已进入该环境;第二,执行 `which python`,如果返回的路径包含 `/miniconda3/envs/ai_infer/bin/python`,说明当前使用的 Python 解释器来自 `ai_infer` 环境。
---
## Problem (infer1): First model inference
### (a) 运行 `inference.py`
**截图和输出:**
{width="5.768055555555556in" height="2.8583333333333334in"}
(输出文件 `output.txt` 内容:略)
### (b) 解释 `x @ w` 的含义
**答:** `@` 运算是矩阵乘法。例如,对于 `x = [[1.0, 2.0, 3.0]]` 和 `w = [[0.2], [0.5], [0.3]]`,计算结果为:
`1.0*0.2 + 2.0*0.5 + 3.0*0.3 = 0.2 + 1.0 + 0.9 = 2.1`。
### (c) 修改输入并再次运行
将输入改为 `x = torch.tensor([[2.0, 1.0, 4.0]])` 后,输出仍为 `tensor([[2.1000]])`。
**原因分析:** 虽然输入发生了变化,但计算过程遵循线性加权求和公式:
由于原始输入 `[1,2,3]` 的计算结果恰好也是 `0.2 + 1.0 + 0.9 = 2.1`,这次修改恰好产生了相同的数值输出。一般来说,改变输入值会导致输出值发生相应变化,因为输出是输入的线性函数。
---
## 进阶内容:Problem (advanced1): Optional profiling with Scalene
### (a) `slow_nn.py` 的主要性能瓶颈在哪里?
**答:** 瓶颈在 `slow_forward` 函数中的 `for i in range(x.shape[0])` 循环。4096 次 Python 循环每次调用 PyTorch 操作,产生大量解释器开销,占用总时间的 90% 以上。
### (b) 你采用了什么优化思路?
**答:** 将逐条样本循环改为批量矩阵运算,一次性处理整个 batch,利用 PyTorch 的底层向量化加速,减少 Python 循环开销。
### (c) 优化前后是否有明显提升?
**答:** 有显著提升。运行时间从 `slow_nn.py` 的约 X 秒(请填入实际测量值)降低到 `fast_nn.py` 的约 Y 秒(请填入实际测量值)。Scalene 显示瓶颈从 Python 循环转移到张量乘法,总时间大幅减少,优化有效。
---
## Problem (export1): Exporting the environment
**任务完成情况:** 激活 `ai_infer` 环境,导出 `environment.yml`,使用 `cat` 查看内容。
**为什么 AI 项目需要保存环境配置:**
AI 项目通常依赖大量特定版本的 Python 库(如 PyTorch、Transformers),不同版本之间可能不兼容。保存 `environment.yml` 可以精确记录项目运行所需的所有依赖,当其他人或自己换一台机器复现实验时,只需执行 `conda env create -f environment.yml` 即可一键重建完全相同的环境,避免了“在我电脑上能跑”的兼容性问题,保证了实验的可复现性和团队协作的便利性。
---
**报告结束**
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)