Autolab使用教程

news/2025/2/25 18:24:33/文章来源:https://www.cnblogs.com/searchstar/p/18736964

搭建教程:{% post_link App/'Autolab搭建教程' %}

SMTP

配置了SMTP才能在用户注册的时候发送confirmation email。

用root user登录进去之后,Manage Autolab -> Configure Autolab -> SMTP CONFIG

填完了之后点击UPDATE CONFIGURATION,配置才会生效。

可以在Configuration Testing里试试配置对不对:在From里填入助教邮箱,在To里填入要接收邮件的邮箱(可以跟From一样),然后点击SEND TEST EMAIL,如果能收到邮件说明成功了。

添加管理员

Manage Autolab -> Manage Users,点击要设置为管理员的用户,EDIT INFORMATION,勾上AdministratorSAVE CHANGES即可。

如果要把还没注册的用户设置成管理员:Manage Autolab -> Manage Users -> CREATE USER,然后填入Email, First name, Last name,勾选Administrator,CREATE USER

添加课程

只有管理员才能添加课程。

Manage Autolab -> Create New Course

Late slack一般设置成3600秒,防止deadline的时候很多人提交导致服务器卡死。

之后可以在Manage Course -> Course settings里修改这些设置。

将学生加入课程

Manage Course -> Manage course users -> ADD USERS FROM EMAILS

添加作业

Manage Course -> Install assessment -> Create New Assessment

Category name是必填的,可以随便填一个,比如Experiments

在作业界面,Edit assessment -> HANDINHandin filename改成submission.zipMax size默认2MB,可能有点太小了,建议改成128MB。改完之后SAVE

PENALTIES里,Max grace days默认是0。一般把下面的Allow unlimited grace days勾上,不然课程grace day就白设置了。改完之后SAVE

PROBLEMS里,ADD PROBLEM,一般只需要填NameMax score。好像没办法直接导入,只能一个一个加。加完之后SAVE

Autograder

BASIC里点击Autograder右边的加号,进入Autograder Settings,或者在作业界面点击Autograder settings

评测机制

autolab在评测同学提交的作业submission.zip的时候,会先通过指定的VM Image创建一个Docker container,然后把Autograder Makefile重命名成Makefile,把Autograder Tar重命名成autograde.tar,和submission.zip放在Docker container里的同一个空目录下面,然后执行make,要求它输出的最后一行形如:

{"scores": {"问题1": 分数1, "问题2": 分数2, ..., "问题n": 分数n}}

autolab会解析这一行,用来打分。其中问题n对应之前PROBLEMS里输入的Name,分数的范围是0到Max score,可以是小数。

VM Image

假设我们要给这个作业的image叫image_p0

我们在autolab的服务器上写一个Dockerfile_p0:

FROM debian:12# git: clone Tango. Dependency of cpptrace
# sudo: needed when installing autodriver
# procps: pkill. Otherwise no feedback
# unzip: submission.zip
# python: grade.py
RUN apt-get update && apt-get install -y \git \build-essential \gcc \make \sudo \procps \unzip \python3 \python3-venv# Install autodriver
WORKDIR /home
RUN useradd autolab
RUN useradd autograde
RUN mkdir autolab autograde output
RUN chown autolab:autolab autolab
RUN chown autolab:autolab output
RUN chown autograde:autograde autograde
RUN git clone --depth 1 https://github.com/autolab/Tango.git
WORKDIR Tango/autodriver
RUN make clean && make
RUN cp autodriver /usr/bin/autodriver
RUN chmod +s /usr/bin/autodriver# Clean up
WORKDIR /home
RUN rm -rf Tango/RUN python3 -m venv /home/.venvs/base
RUN echo ". /home/.venvs/base/bin/activate" >> /home/.profile
RUN . /home/.profile && pip3 install func-timeout# assessment-specific packages
RUN apt-get update && apt-get install -y \sqlite3
sudo docker build -t image_p0 -f Dockerfile_p0 .

然后在autolab的VM Image里填入image_p0即可。

Autograder Makefile

我们可以创建一个通用的Autograder Makefile:

all: submission.zip autograde.tarif [ -f /home/.profile ]; then \. /home/.profile; \fi; \rm -rf handin; \mkdir handin; \unzip submission.zip -d handin; \mkdir -p autograde; \tar xf autograde.tar -C autograde; \cd autograde && ./driverclean:rm -rf handin autograde.PHONY: all clean

在这个Autograder Makefile中,我们把submission.zip解压到handin里,把autograde.tar解压到autograde里,然后执行driver来评测。

driver

一般我们把测试相关的文件放到autograde.tar里,在driver中把这些文件copy到handin里,防止学生篡改这些文件。然后再做编译之类的准备工作。最后调用grade.py评分。例子:

#!/usr/bin/env sh
set -e
# Overwrite essential files in case students tampered up them
cp -r essential/* ../handin/
cd ../handin
# 如果需要编译的话,在这里加上编译的命令
../autograde/grade.py

grade.py

我们可以写一个通用的grade.py,让它读取config.json来决定怎么评分,并且在超时时输出已经测完的问题的分数:

#!/usr/bin/env python3
# Call this script in the handin folderimport sys
import os
import json
import subprocessfrom func_timeout import FunctionTimedOut
from func_timeout.StoppableThread import StoppableThreadmydir = os.path.dirname(os.path.abspath(sys.argv[0]))
config = json.load(open(os.path.join(mydir, 'config.json')))scores = {}def run_tests():try:global scoresfor problem in config['problems']:executable = problem['exec']args = problem['args']process = subprocess.Popen([executable] + args)# We must wait with timeout, otherwise it won't respond to external exceptions.# https://stackoverflow.com/a/631605/13688160if process.wait(timeout=23333333) == 0:score = problem['score']print(problem['name'] + ' passed')else:score = 0print(problem['name'] + ' failed')scores[problem['name']] = scoreexcept FunctionTimedOut:try:process.kill()except NameError:passexcept Exception as e:# Code to handle any other exceptionprint("An error occurred: {}".format(str(e)))tester = StoppableThread(target=run_tests)
tester.start()
tester.join(timeout=config['timeout'])
if tester.is_alive():tester.stop(exception=FunctionTimedOut)tester.join()print(f"The whole google test timed out after {config['timeout']} seconds")print("Please make your code faster.")out = ''
for problem in config['problems']:if len(out) != 0:out += ', 'if problem['name'] in scores:score = scores[problem['name']]else:score = 0out += '"' + problem['name'] + '": ' + str(score)
print('{"scores": {' + out + '}}')

config.json

示例:

{"problems": [{"name": "问题1","exec": "执行的文件(相对于handin的路径)","args": ["参数1", "参数2", ...],"score": 分数},],"timeout": 120
}

Autograder Tar

建议的目录结构:

XX-course
|- common
|  |- grade.py
|- p0|- .gitignore|- autograde.tar (ignore in .gitignore)|- config.json|- driver|- essential|  |-略|- Makefile

p0/Makefile:

files = driver config.json $(wildcard essential/*)
autograde.tar: ../common/grade.py $(files)tar cf autograde.tar $(files) -C ../common grade.py

以后在p0下面直接make就可以生成autograde.tar了。然后用scp之类的方法弄到本地,然后上传到autolab的Autograder Tar即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889686.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

啦啦啦啦啦啦啦啦啦

啦啦啦 啦啦啦啦啦啦啦啦啦 ABC221G 神秘题,将坐标轴转 \(45\),然后 bitset 优化背包,记录路径把刚刚被更新的找出来,然后 _Find_next,每个点只会记一次。 AGC050a 神秘题,想到 \(\log\),然后发现一下位置 \(x\) 走十次能到的区间是 \([1024x,1024x+1023]\),区间长度够…

破解 vLLM + DeepSeek 规模化部署的“不可能三角”

通过 FC GPU 预留实例的闲置计费功能,企业用户能在充分利用 vLLM 的强大功能的同时找到成本、性能、稳定的最佳平衡点,并保持开发和运维的高效性。无论是将 FC vLLM 函数直接对外提供服务,还是深度集成到现有系统中,或是通过 CAP 还是魔搭来简化部署,都能找到满足您业务需…

条形码编码规则全解析:从黑白条纹到数字世界的转换密码

条形码的编码规则是将字符(数字、字母等)转换为特定黑白条纹或矩阵结构的标准化方法,核心目的是让机器能够快速、准确地识别和解析信息。以下是常见条形码编码规则的简介: 一维条形码编码规则 1. ​基本原理通过不同宽度的黑白条纹​(或空格)组合表示字符。 每个字符对应…

[汽车电子/车联网] CANoe

概述:CANoe CAN 全家桶区别: CANoe vs CanalyzerCANoe和CANalyzer使用方法类似(简直可以说 相同)。 都可用于simulation,区别在于CANalyzer只能模拟单个Node,而CANoe可以同时模拟多个Node。如果入门学习了CANoe,就不用入门学习CANalyzer了。安装指南 安装 CANoeDemo on …

璞华易研PLM荣登软服之家多项榜单,PLM+AI为流程行业提供产品创新引擎

近日,国内知名软件与服务评测平台软服之家发布了多个PLM(Product Lifecycle Management,产品全生命周期管理)榜单,帮助用户了解PLM领域表现卓越的软件产品和服务。在软服之家的多项榜单中,璞华易研PLM凭借其自主研发能力与行业深耕优势,在流程行业、电子信息、装备制造等…

ELK 原理介绍及实践详解

介绍了ELK(Elasticsearch, Logstash, Kibana)在大规模日志管理中的重要性,阐述了ELK解决日志分析的挑战,如日志收集、传输、存储和分析。文章详细讲解了ELK的组成部分,包括Filebeat的工作原理、Logstash的输入、过滤和输出阶段,以及Kibana的分析和可视化功能。此外,还提…

工信部人才交流中心PostgreSQL认证考试 - 聊一下更多精彩

在数字经济高速发展的今天,数据库作为信息基础设施的核心组件,其技术自主性与人才储备已成为国家战略竞争力的关键。工业和信息化部人才交流中心(以下简称“工信人才”)推出PostgreSQL认证考试,不仅是对技术发展趋势的精准响应,更是推动信创产业生态建设、填补数据库人才缺…

单链表与单循环链表的C语言实现

单链表与单循环链表的C语言实现 目录单链表与单循环链表的C语言实现单链表的增删查改单循环链表的增删查改 单链表的增删查改 /*单链表*/#include<stdio.h> #include<stdlib.h>typedef struct Node{int data;struct Node* next; }Node;Node* initList(){Node* node…

可能是全球最快捷的修改hosts文件方式

使用快捷方式一键修改hosts文件。 下面请看VCR:其实关键的命令只有一条:powershell.exe -Command "Start-Process -FilePath notepad.exe -Verb RunAs -ArgumentList "$env:SystemRoot\system32\drivers\etc\hosts""它使用记事本以管理员权限打开位于 C:…

KUKA机器人KR70伺服电机力矩不足维修攻略

库卡机器人作为先进的工业自动化解决方案,广泛应用于各种生产线中。然而,当出现KUKA机械手伺服马达力矩不足干燥的问题时,可能会严重影响其工作效率和性能。 一、库卡机器人电机力矩不足故障的原因 1. 电机老化:随着使用时间的增加,电机内部的零部件可能会出现磨损,导致力…

S2-防护-战士Warrior-团体-大秘境-专精-天赋-配装-宏

S2毕业装--属性 急速>全能>爆击>精通 急速和全能越高越好。爆击和精通随缘。 --团本天赋(更新时间2月5日)--团本天赋代码 CkEAmidFBOBFf5oKuZ7r/WeW7YEDAAAAzMzYmZGMbzsMzMz2mZMMNzgZmBwyADbMzMwDMzDMMAAAAAAgZGAgltNADDsBLLGNmBwsFbYD --大秘天赋(更新时间2月5日)--大…

S2-武器-战士Warrior-团体-大秘境-专精-天赋-配装-宏

S2毕业装--属性 急速>爆击>精通>全能 急速和爆击越高越好。精通随缘。不要全能。 --团本/单体天赋(更新时间2月10日)--团本/单体天赋代码 CcEAmidFBOBFf5oKuZ7r/WeW7AAzYmZMzMzsZZZZmBAAAADmGmZYbGzAzYMzMYmhBGmhBAAAAAAAPwYWmZmBQgxy2ALgBMDTIDwG --大秘/AOE巨神兵天…