此页面旨在提高项目的可发现性。例如,您可以在此页面上搜索特定关键字并找到所有相关的项目。
MLJ 是一个用于 Julia 的机器学习框架,旨在提供一种便捷的方式来使用和组合 Julia ML/Stats 生态系统中提供的众多工具和模型。
MLJ 在 MIT 许可下发布,并由艾伦·图灵研究所赞助。
扩展 MLJ 的分类变量编码。
难度。中等。持续时间。350 小时
MLJ 提供了分类变量的基本独热编码,但没有提供复杂的编码技术。独热编码相当有限,尤其是在分类具有非常多的类别时。存在许多其他技术,并且此项目旨在使其中一些技术可供 MLJ 用户使用。
导师。Anthony Blaom(最佳联系方式:在 Julia Slack 上发送私信)
精通 Julia 语言至关重要。
强烈建议熟悉 Git 工作流程。
机器学习和数据科学工作流程的经验。
熟悉 MLJ 的 API 也是一个加分项。
在此项目中,您将调查流行的现有方法,用于对分类变量进行独热编码。与导师合作,您将制定一个将其中一些技术集成到 MLJ 中的计划。您将开始着手实施该计划,最初专注于简单的方法,为现有的 Julia 包提供 MLJ 接口,或在需要时提供新的实现。如果项目进展顺利,您将实施更高级的技术,例如通过 MLJFlux.jl(MLJ 的神经网络接口)实现实体嵌入。
MLJ 中现有的编码:OneHotEncoder;ContinuousEncoder;UnivariateContinuousTimeEncoder
StatsModels.jl 编码器
MLJ 功能请求
Guo 和 Berkhahn [(2016]](https://arxiv.org/abs/1604.06737)“分类变量的实体嵌入”
实现用于在 MLJ 机器学习平台中使用的生存分析模型。
难度。中等 - 困难。持续时间。350 小时
生存/事件发生时间分析是统计学中的一个重要领域,它关注的是了解事件随时间的分布。生存分析提出了一个独特的挑战,因为我们也对没有发生的事件感兴趣,我们称之为“删失”。生存分析方法在许多现实世界环境中都很重要,例如医疗保健(疾病预后)、金融和经济学(违约风险)、商业企业(客户流失)、工程学(组件寿命)等等。本项目旨在使用 MLJ 机器学习框架实现执行幸存者分析的模型。
mlr3proba 目前是最完整的生存分析接口,让我们让 SurvivalAnalysisA.jl 达到相同的标准 - 但要从一路上的错误中吸取教训。
导师。Sebastian Vollmer,Anthony Blaom,
精通 Julia 语言至关重要。
强烈建议熟悉 Git 工作流程。
具备一些生存分析经验。
熟悉 MLJ 的 API 也是一个加分项。
对机器学习目标和工作流程有初步了解是
首选的。
您将致力于创建一个具有各种指标的生存分析包,能够对经典模型和 ML 模型进行分布预测。您将在早期加入竞争风险,以及预测转换,并包括左删失和区间删失。您将编写基本模型(Cox PH 和 AFT),以及一个作为概念证明的 ML 模型(可能是决策树最简单或 Coxnet)。
具体来说,您将
熟悉训练和评估机器
MLJ 中的学习模型。
对于 SurvivalAnalysis.jl,实现MLJ 模型接口。
考虑通过 SurvSHAP(t) 解释 SurvivalAnalysis
为目前在 Julia 中未实现的更新的高级生存分析开发概念证明
模型。
Mateusz Krzyziński 等人,SurvSHAP(t):机器学习生存模型的时间相关解释,基于知识的系统 262(2023 年 2 月):110234
Kvamme,H.,Borgan,Ø。和 Scheel,I。(2019)。使用神经网络和 Cox 回归进行事件发生时间预测。机器学习研究杂志,20(129),1-30。
Lee,C.,Zame,W. R.,Yoon,J. 和 van der Schaar,M。(2018)。Deephit:一种用于具有竞争风险的生存分析的深度学习方法。在第三十二届 AAAI 人工智能大会上。
Katzman,J. L.,Shaham,U.,Cloninger,A.,Bates,J.,Jiang,T. 和 Kluger,Y。(2018)。DeepSurv:使用 Cox 比例风险深度神经网络的个性化治疗推荐系统。BMC 医学研究方法学,18(1),24。
Gensheimer,M. F. 和 Narasimhan,B。(2019)。神经网络的可扩展离散时间生存模型。](https://peerj.com/articles/6257/) PeerJ,7,e6257。
贝叶斯方法和概率监督学习提供不确定性量化。本项目旨在增加集成以结合贝叶斯和非贝叶斯方法,使用 Turing。
难度。困难。持续时间。350 小时。
作为第一步,在 Turing 中重现SOSSMLJ。该项目的大部分内容是实现结合多个预测分布的方法。
Turing 和 MLJ 之间的接口
预测分布集成和堆叠的比较
跨各种设置的可复现基准。
导师: 葛洪 Sebastian Vollmer
帮助使用 MLJ 的数据科学家使用 MLflow 追踪和分享他们的机器学习实验。该项目此阶段的重点是
支持异步工作流,如并行化模型调优中出现的情况
支持在训练迭代模型(如神经网络)时进行实时日志记录
难度:中等。时长:350 小时。
MLflow 是一个用于机器学习生命周期的开源平台。它允许数据科学家将实验元数据和输出上传到平台,以实现复制和共享的目的。MLJ 已经允许 用户将基本的模型性能评估报告到 MLflow 服务,而这个项目旨在极大地增强这种集成。
精通 Julia 语言
理解异步编程原理
强烈建议熟悉 Git 工作流。
对数据科学工作流有基本了解
您将熟悉 MLJ、MLflow 和 MLflowClient.jl 客户端 API。
您将熟悉提供 MLJ <–> MLflow 集成的 MLJFlow.jl 包
实施必要的更改以允许对模型性能评估进行正确的异步日志记录
将日志记录扩展到(并行化)模型调优(MLJ 的 TunedModel
包装器)
将日志记录扩展到迭代模型的受控训练(MLJ 的 IteratedModel
包装器)
导师: Anthony Blaom
诊断和利用加快常用 MLJ 工作流的机会。
难度:中等。时长:350 小时。
除了调查一些已知的性能瓶颈之外,您还将拥有自由裁量权来确定加快常用 MLJ 工作流的机会,以及更好地利用内存资源。
精通 Julia 语言。
具有多线程和多处理器计算经验,最好是在 Julia 中。
强烈建议熟悉 Git 工作流。
熟悉机器学习目标和工作流
在这个项目中,您将
熟悉在 MLJ 中训练、评估和调整机器学习模型
对常见的工作流进行基准测试和分析,以确定进一步代码优化的机会,重点关注最流行的模型
努力解决发现的问题
推出用于迭代模型的新数据前端,以避免不必要的复制数据
尝试为当前的学习网络调度程序添加多处理器并行性
实现其中一些优化
导师: Anthony Blaom,Okon Samuel。
贝叶斯优化是一种用于(潜在噪声)函数的全局优化策略,这些函数具有未知导数。通过精心选择的先验,它可以比替代方法使用更少的函数评估来找到最优值,使其非常适合优化代价高昂的目标函数。
众所周知的例子包括机器学习模型的超参数调整(例如,参见 Taking the Human Out of the Loop: A Review of Bayesian Optimization)。Julia 包 BayesianOptimization.jl 目前仅支持基本的贝叶斯优化方法。有多个方向可以改进该包,包括(但不限于)
更好的默认值(时长:175 小时,预期难度:简单):编写一个广泛的测试套件并实现更好的默认值;从例如 dragonfly 中汲取灵感。
推荐技能:熟悉贝叶斯推理、非线性优化、编写 Julia 代码和阅读 Python 代码。
预期成果:经过良好测试和记录的新功能。
导师: Johanni Brea
目前正在进行许多编译器项目。请与 Jameson Nash 联系以获取更多详细信息,并让我们知道您对该贡献领域的哪些方面特别感兴趣。这样,我们可以根据您的兴趣和技能调整您的项目。
LLVM 别名分析 (175-350 小时) Julia 语言使用 LLVM 作为代码生成的后台,因此代码生成的质量对于性能非常重要。这意味着对于那些了解或对 LLVM 感兴趣的人来说,有很多机会可以通过参与 Julia 的代码生成过程来做出贡献。我们最近遇到了 memcpy 信息仅接受单个别名元数据参数而不是为源和目标提供单独信息的问题。在我们生成的或 LLVM 的传递消耗的别名信息中,还有其他类似的缺少描述性或优化步骤。
预期成果:改进 Julia 代码生成的“LLVM 级别”的别名信息。
技能:C/C++ 编程
难度:困难
宏卫生重新实现,以消除当前方法固有的不正确预测 (350 小时)
这可能是一个适合想要学习 lisp/scheme 的人的好项目!我们当前的算法分多个阶段运行,这意味着有时我们在分配每个值的实际作用域之前,在比我们为变量计算正确作用域的早期阶段计算错误的作用域。请参阅 https://github.com/JuliaLang/julia/labels/macros,尤其是诸如 https://github.com/JuliaLang/julia/issues/20241、https://github.com/JuliaLang/julia/issues/53667、https://github.com/JuliaLang/julia/issues/53673 和 https://github.com/JuliaLang/julia/issues/34164 等问题。
预期成果:理想情况下,重新实现卫生宏。实际上,解决一些或所有 macros
问题。
技能:希望具备 Lisp/Scheme/Racket 经验,但并非必需。
难度:中等
改进变量的调试信息输出 (175 小时)
我们已经具备了部分用于表示变量的 DWARF 信息的基础设施,但仅限于有限的几个地方。我们可以做得更好,因为有很多改进的机会!
预期成果:能够在 gdb 中查看更多变量、参数和对象详细信息 推荐技能:大多数这些项目都涉及算法工作,需要愿意并且有兴趣了解如何与大型系统集成。
难度:中等
导师: Jameson Nash,Gabriel Baraldi
代码覆盖率报告涵盖了所有 Julia Stdlib 包的非常好的覆盖率,但并不完整。此外,覆盖率工具本身(–track-coverage 和 https://github.com/JuliaCI/Coverage.jl)可以进一步增强,例如,提供更好的语句覆盖率准确性或更高的精度。成功的项目可能结合构建代码和查找其他人代码中的错误这两方面。
另一个相关的子项目可能是探索向覆盖率报告中添加类型信息?
推荐技能:关注细节,喜欢提交代码问题,以及破坏事物的能力。
联系方式: Jameson Nash
正在持续不断地进行工作以改进正确性和线程化代码。简而言之,以下是一些关于如何加入此工作的想法:
测量和优化调度程序 partr
算法的性能,并添加根据工作负载大小动态扩展它的能力。或者用 Julia 中的 workstealing
实现替换它。
自动插入和随后优化 GC 安全点/区域,尤其是在循环周围。对于 ccall
类似地,实现将特定 ccall
定义为安全区域的能力。
解决运行时中的各种线程安全性和数据竞争错误。(例如 https://github.com/JuliaLang/julia/issues/49778 和 https://github.com/JuliaLang/julia/pull/42810)
加入定期安排的多线程电话会议,讨论 Julia 语言公共活动日历上的 #多线程 BoF 日历邀请 中的任何内容。
推荐技能:因项目而异,但通常需要一些多线程和 C 经验
联系方式: Jameson Nash
Nanosoldier.jl 项目(以及相关的 https://github.com/JuliaCI/BaseBenchmarks.jl)测试了一些更改的性能影响。但是,仍然有许多未涵盖的领域(例如编译时间),而其他领域则覆盖过度(大大增加了测试时间而没有好处),并且某些测试可能没有针对统计功效进行适当配置。此外,当前的报告非常原始,只能进行基本的成对比较,而图表和其他交互式工具将更有价值。因此,对于夏季贡献者来说,这里将会有很多很棒的项目可以应对!
预期成果:改进 Julia 的自动化测试/基准测试框架。技能:对 CI 系统感兴趣和/或有经验。难度:中等
联系方式: Jameson Nash,Tim Besard
OMEinsum.jl 是一个用于张量网络计算的纯 Julia 包,已用于各种项目,包括
GenericTensorNetworks.jl 用于解决组合优化问题,
YaoToEinsum.jl 用于模拟大规模量子电路,以及
TensorInference.jl 用于贝叶斯推理。
与其他张量收缩包(如 ITensors.jl
和 TensorOperations.jl
)不同,它专为具有任意拓扑的大规模张量网络而设计。OMEinsum.jl
的关键特性是它可以自动优化张量网络的收缩顺序。相关功能在 OMEinsumContractionOrders.jl 中实现。
我们正在寻找一名学生来完成以下任务
基于 Tamaki 算法 实现更好的收缩顺序优化器。
基于 arXiv:2308.05043 实现超图可视化工具
将收缩顺序优化器移植到 TensorOperations.jl
推荐技能:熟悉张量网络、图论和高性能计算。
预期结果
为包 OMEinsumContractionOrders.jl
添加新功能以及测试和相关文档。
关于超图可视化的新包,以及添加到 OMEinsum.jl
的相关功能。
向 TensorOperations.jl
发出请求以进行更好的收缩顺序优化。
导师: 刘金国,Jutho Haegeman 和 Lukas Devos
项目难度:中等至困难
项目时长:350 小时
联系方式:欢迎通过 电子邮件 或 Julia Slack(用户名:刘金国)提问。
Julia 手册以及大量生态系统组件的文档都是使用 Documenter.jl 生成的——本质上是一个与 Julia 及其文档系统集成的静态网站生成器。对于任何有兴趣参与 Julia 接口、文档和各种前端技术(Web、LaTeX)方面工作的人来说,这里有大量改进的机会。
Ferrite.jl 是一个 Julia 包,提供了开发偏微分方程有限元模拟的基本构建块。该包提供了大量的示例供参考,并且设计为简单性和通用性之间的折衷方案,试图以低级的方式将有限元概念与代码 1:1 映射。Ferrite 被多个国家(例如鲁尔大学波鸿和查尔默斯理工大学)的几所大学积极用于教授有限元。其他基础设施以不同网格解析器和一个名为 FerriteViz.jl 的基于 Julia 的可视化工具的形式提供。
下面我们提供了 Ferrite.jl 中四个潜在的项目想法。但是,感兴趣的学生可以自由探索他们感兴趣的想法。请联系下面列出的任何一位导师,或加入 Julia Slack 上的 #ferrite-fem
频道进行讨论。使用 FerriteViz.jl 也可能进行有限元可视化方面的项目。
难度:简单-中等(取决于你的具体背景)
项目规模:150-300 小时
问题:Ferrite.jl 设计时考虑了在子域上定义偏微分方程的可能性。这使得它非常适合界面耦合的多物理场问题,例如流固耦合问题。但是,我们目前在文档中没有展示此功能的示例。我们也没有提供界面耦合问题所需的所有实用程序。
最低目标:该项目的最低目标是在一个简单的设置中创建一个功能齐全且有文档记录的线性流固耦合示例,将线性弹性与斯托克斯流耦合起来。代码应具有适当的测试覆盖率。
扩展目标:有了这个最小功能示例,可以将项目扩展到不同的方向,例如优化求解器或非线性流固耦合。
推荐技能:
有限元方法的基础知识
关于固体或流体的基本知识
编写快速代码的能力(或学习的渴望)
导师:Dennis Ogiermann 和 Fredrik Ekre
难度:中等
项目规模:250-350 小时
问题:Ferrite.jl 在单线程有限元模拟方面具有出色的性能,这得益于精心设计的冗余工作负载消除。但是,我们最近发现单线程组装的工作方式使得并行组装受内存限制,导致“廉价”组装循环的实现无法在各种系统上扩展。此问题还将转化为高阶方案,其中现有的单线程策略会阻止某些常见的优化策略(例如求和分解)。
最低目标:作为迈向更好并行组装性能的第一步,需要研究不同的组装策略。局部和全局无矩阵方案是此处可以探索的可能性。代码必须经过适当的基准测试和测试,以识别不同的性能问题。
扩展目标:有了这个最小功能示例,可以将项目扩展到不同的方向,例如优化的无矩阵求解器或 GPU 组装。
推荐技能:
有限元方法的基础知识
关于基准测试的基本知识
编写快速代码的能力(或学习的渴望)
导师:Maximilian Köhler 和 Dennis Ogiermann
图神经网络 (GNN) 是深度学习模型,非常适合采用图形式的数据,其中节点和边都关联特征向量。GNN 是一个不断发展的研究领域,在复杂网络分析、关系推理、组合优化、分子生成以及许多其他领域都有广泛的应用。
GraphNeuralNetworks.jl 是一个纯 Julia 图神经网络包,具有许多功能。它实现了常见的图卷积层,并支持 CUDA 和图批处理以进行快速并行操作。可以通过多种方式改进该包。
包含数百万个节点的图对于 GPU 内存来说太大。像 GraphSAGE 算法一样,对子图执行小批量训练。
持续时间:350 小时。
预期难度:困难。
预期成果:将 GNN 训练扩展到超大型图所需的算法组件。
虽然我们实现了各种图卷积层,但仍然有大量的图卷积层有待实现。预处理工具、池化算子和其他与 GNN 相关的功能也可以考虑。
持续时间:175 小时。
预期难度:简单到中等。
预期成果:使用各种新的层和算子丰富该包。
作为文档的一部分以及为启动新项目,我们希望添加完整的图神经网络示例和应用。我们可以从入门级教程开始,逐步向读者介绍更高级的功能。
持续时间:175 小时。
预期难度:中等。
预期成果:一些关于图神经网络应用的教学和更高级的示例。
为 MLDatasets.jl
中常见的图数据集提供 Julia 友好的包装器。为 Julia 机器学习和数据生态系统创建便捷的接口。
持续时间:175 小时。
预期难度:简单。
预期成果:Julia 生态系统可以轻松访问的大量图数据集。
在一些复杂网络中,边表示的关系可以是不同类型的。我们目前使用 GNNHeteroGraph
类型支持这一点,但当前的图卷积层中没有一个支持异构图作为输入。在这个项目中,我们将为异构图实现一些层。
持续时间:175 小时。
预期难度:中等。
预期成果:为异构网络实现新的图类型和相应的图卷积层。
许多图卷积层可以表示为涉及邻接矩阵的非物化代数运算,而不是速度更慢且更占用内存的 gather/scatter 机制。我们的目标是尽可能地以 GPU 友好的方式扩展这些融合的实现。
持续时间:350 小时。
预期难度:困难。
预期成果:许多图卷积操作的性能显著提升。
我们目前仅支持在 CPU 和 CUDA 硬件上进行 scatter/gather 操作。我们的目标是利用 KernelAbstractions.jl、AMDGPU.jl 和 Metal.jl 将其扩展到 AMDGPU 和 Apple Silicon。
持续时间:175 小时。
预期难度:中等。
预期成果:AMD GPU 和 Apple 硬件上的图卷积加速,性能大致与 CUDA 相当。
时间图是指其拓扑结构随时间变化的图。我们目前使用 TemporalSnapshotsGNNGraph 类型支持这一点,但当前的图卷积和池化层中没有一个支持时间图作为输入。目前,有一些卷积层以具有时间特征的静态图的特殊情况作为输入。在这个项目中,我们将实现以时间图作为输入的新层,并将创建演示如何使用它们的教程。
持续时间:350 小时。预期难度:中等。预期成果:实现用于时间图的新卷积层和示例教程。
熟悉图神经网络和 Flux.jl。
Carlo Lucibello(GraphNeuralNetworks.jl 的作者)。请随时在 Julia Slack 工作区 或通过在 GitHub 仓库中打开问题与我们联系。
QML.jl 包为 Windows、OS X 和 Linux 上的 Qt QML 提供了 Julia 绑定。在当前状态下,基本 GUI 功能已经存在,并且与 Makie.jl 进行了粗略的集成,允许在 Makie 可视化之上叠加 QML GUI 元素。
将 Makie 的 QML 代码拆分为一个单独的包。 这将允许在 QML 和 Makie 之间指定正确的包兼容性,而无需将 Makie 作为 QML 的强制依赖项(目前我们使用 Requires.jl 来实现这一点)
改进集成。 目前,Makie 和 QML 之间的连接主要需要手动设置。我们需要实现一些常用功能,例如在视口中注册点击并进行正确的坐标转换以及 3D 视口的导航。
推荐技能:熟悉 Julia 和 Qt 框架,一些基本的 C++ 技能,对 3D 图形和 OpenGL 的亲和力。
持续时间:175 小时,预期难度:中等
导师:Bart Janssens 和 Simon Danish
Makie.jl 是 Julia 编程语言的可视化生态系统,专注于交互性和性能。JSServe.jl 是使 Makie 的基于 Web 的后端成为可能的核心基础设施库。
目前,在 Makie 中设计基于 Web 的用户界面 (UI) 所需的所有要素都已存在,但整个过程本身非常底层且耗时。该项目的目的是简化这一过程。
实现新的 UI 组件并改进现有的组件。
引入适合表示复杂 UI 的数据结构。
为常见场景添加更简单的语法,类似于 Interact 的 @manipulate
宏。
改进文档和教程。
简化部署过程。
额外任务。 如果时间允许,可以探索以下方向之一。
使 Makie 基于 Web 的绘图更适合通用 Web 应用(将更多计算转移到客户端,提高交互性和响应速度)。
将 UI 基础设施推广到原生小部件,这些小部件已在 Makie 中实现,但具有不同的接口。
所需技能。 熟悉 HTML、JavaScript 和 CSS,以及反应式编程。使用 Julia 可视化和 UI 生态系统的经验。
持续时间。 350 小时。
难度。 中等。
导师。 Pietro Vertechi 和 Simon Danisch。
Julia 正在成为一种重要的技术计算工具,并且非常适合满足不断增长的海量数据分析需求。这组建议的项目针对分析算法和分布式数据管理方面的具体改进领域。
难度:中等(175 小时)
Dagger.jl 是一个本机 Julia 框架和调度程序,用于 Julia 代码的分布式执行和通用数据并行,使用动态的、运行时生成的、足够灵活以描述多类并行算法的任务图。该项目建议为 Dagger 实现不同的调度算法,以优化某些类别的分布式算法(如 mapreduce 和归并排序)的调度,并正确利用异构计算资源。参与者将需要查找已发布的分布式调度算法,并在 Dagger 框架之上实现它们,对各种微基准和实际问题进行调度性能基准测试。
导师:Julian Samaroo,Krystian Guliński
难度:困难(350 小时)
为基于Dagger.jl构建的Flux模型添加一个分布式训练API。更详细的里程碑包括为UCX.jl构建Dagger.jl抽象,然后构建工具将Flux模型映射到数据并行的Dagger DAG。最终结果应演示一个Flux模型通过Dagger.jl API并行使用多个设备进行训练。一个扩展目标将包括将模型的操作映射到DAG,以促进模型并行化。
现在有一些项目托管了构建块:DaggerFlux.jl和分布式数据并行训练,它们可以作为起点。
技能:熟悉UCX、将执行模型表示为DAG、Flux.jl、CUDA.jl以及机器学习中的数据/模型并行化
导师:Julian Samaroo和Dhairya Gandhi
难度:中等(175 小时)
数组编程可能是Julia中最强大的抽象,但我们对分布式数组的支持还有待改进。本项目的目标是在Dagger.jl框架之上实现一种新的分布式数组类型,这将允许这种新的数组类型易于分布、多线程并支持GPU执行。参与者将需要在其分布式数组实现之上实现各种操作,例如mapreduce、排序、切片和线性代数。最终结果将包括在一系列配置上的广泛扩展基准测试,以及对支持操作的广泛测试套件。
导师:Julian Samaroo,Evelyne Ringoot
JuliaImages(参见文档)是Julia中用于多维数组、图像处理和计算机视觉(CV)的框架。它拥有活跃的开发社区,并提供了许多功能,可以统一CV和生物医学3D/4D图像处理,支持大数据,并促进交互式探索。
通常,最好的想法是候选SoC贡献者自己想出来的。我们很乐意讨论这些想法并帮助你完善你的提案。下面是一些可能有助于激发思考的潜在项目想法。一般来说,JuliaImages中缺少的任何内容,并且值得三个月的开发,都可以被视为潜在的GSoC想法。请参阅此页面底部有关导师的信息。
难度:中等(175小时)(高优先级)
JuliaImages提供了许多算法的高质量实现;然而,到目前为止,还没有一套基准测试来比较我们的代码与其他图像处理框架的代码。开发此类基准测试将使我们能够宣传我们的优势和/或识别进一步改进的机会。另请参阅下面的OpenCV项目。
针对几个性能敏感的包(例如,ImageFiltering、ImageTransformations、ImageMorphology、ImageContrastAdjustment、ImageEdgeDetection、ImageFeatures和/或ImageSegmentation)与Scikit-image和OpenCV等框架进行基准测试,以及可选地与ITK、ImageMagick和Matlab/Octave等其他框架进行基准测试。另请参阅图像基准测试存储库。
此任务至少分为两个部分
开发收集数据的框架,以及
可视化结果。
还应该意识到,实现上的差异(可能包括质量差异)可能会使某些基准测试的解释复杂化。
技能:需要JuliaImages经验。最好熟悉其他图像处理框架。
导师:Tim Holy
我们鼓励感兴趣的贡献者在Images.jl中开启讨论,介绍自己并讨论详细的项目想法。为了增加获得有用反馈的机会,请提供详细的计划和想法(不要只是复制这里的内容)。
CxxWrap.jl包提供了一种将编译后的C++代码加载到Julia中的方法。它将一小部分C++标准库暴露给Julia,但仍需要暴露更多函数和容器(例如std::map
)。本项目的目的是提高C++标准库的覆盖率。
添加缺少的STL容器类型(简单)
添加对STL算法的支持(中等)
调查编译时间改进和包含类型选择的改进(高级)
推荐技能:熟悉Julia和C++
持续时间:175小时,预期难度:困难
查看“Pluto”页面上列出的hyper.rs项目,了解如何在Julia包中包装Rust HTTP服务器。
JuliaConstraints是一个支持Julia中约束编程包的组织。虽然它独立于JuMP.jl,但它旨在随着时间的推移与JuMP.jl紧密集成。有关Julia中基本约束编程的详细概述,请查看我们来自JuliaCon 2021的视频用JuliaCon(straints)为你的生活设定一些约束。
通常,解决问题涉及采取两个行动:建模和求解。通常,建模的容易程度和求解的效率之间存在权衡。因此,人们通常需要成为专家才能有效地建模和求解优化问题。我们研究了自动化和构建优化框架的工具的理论基础和实现。一般用户应该专注于实际问题的模型,而不管可用的软件或硬件如何。此外,我们旨在鼓励技术用户使用我们的工具来提高他们的求解效率。
导师:Jean-Francois Baffier(azzaare@github)
这个项目处于为Kumi Kumi Slope游戏开发关卡设计工具的最前沿,利用了Julia编程语言的功能。它优先考虑为用户创建一个交互式图形用户界面(GUI),以便用户积极参与设计优化。虽然(GL)Makie.jl是此GUI的强大候选者,但该项目仍然对其他创新解决方案(例如基于Genie.jl的界面)持开放态度,以适应不同的开发偏好。这项计划的关键是处理任意域、为多目标优化生成解决方案池以及提供游戏设计的视觉输出。这项对约束编程(CP)的探索为设计效率奠定了基础,同时采用了用户定义的美学目标,并标志着在建筑设计中人机协作的开创性一步。
多目标优化和任意域(100-150小时)
多目标优化框架:建立一个强大的框架来同时处理多个目标,范围从效率和紧凑性到可玩性和美观性。
对任意域的支持:设计一种方法来定义和操作CP模型中的任意域,从而实现各种组件类型和设计约束。
解决方案池和交互式GUI开发(150-200小时)
解决方案池的生成:设计算法来创建各种可行解决方案池,以满足不同的优化标准和用户偏好,培养对设计中人机协作的细致入微的方法。
交互式GUI开发:使用(GL)Makie.jl或替代工具开始开发交互式GUI,以促进Kumi Kumi Slope设计的可视化和操作,使用户能够在一个以用户为中心的的环境中探索、选择和完善设计。
视觉输出和用户交互(100-150小时)
设计的视觉表示:确保所有潜在解决方案都在GUI中以视觉方式表示,增强用户评估和对比不同设计的能力。
设计改进的反馈机制:在GUI中集成反馈循环,允许用户交互来完善解决方案池,使其更符合用户偏好,并体现项目对人机协作设计的承诺。
本提案旨在在GSoC期限结束时交付一个重要且有影响力的工具。它鼓励候选人深入研究他们特别感兴趣的领域,提供项目重点的灵活性。通过强调现实的目标,例如开发交互式GUI以及处理任意域和多目标优化的基础工作,该项目为未来游戏设计的进步树立了先例,并为需要复杂设计和优化工具的更广泛的应用打开了大门。
难度:中等至困难。
时长:根据项目的不同,为175到350小时。
Agents.jl是一个用于基于代理的建模(ABM)的纯Julia框架。它拥有广泛的功能列表、出色的性能,并且易于学习、使用和扩展。与用Python或Java编写的其他流行框架(NetLOGO、MASON、Mesa)相比,Agents.jl在计算速度、功能列表和可用性方面都优于所有其他框架。
在这个项目中,贡献者将与Agents.jl的主要开发人员配对,以使用更多功能、更好的性能和整体更高的完善度来改进Agents.jl。我们乐意与潜在的候选人讨论项目的描述和概述!
可以实现的功能包括
通过将现有的ABM包(Vanaha.jl或CellBasedModels.jl)集成到Agents.jl API中,在Agents.jl中提供GPU和/或HPC支持。
表示行星的新类型空间,可用于气候政策或人类进化建模,以及由多个较小的ABM组成的总体ABM的新接口
先决条件:已经为JuliaDynamics中的Julia包或与JuliaDynamics足够相关的包做出贡献。
推荐技能:熟悉基于代理的建模、Agents.jl和Julia的类型系统。不需要复杂系统、社会学或非线性动力学的背景,但如果有会更有优势。
预期结果:记录良好、测试良好的Agents.jl的有用新功能。
导师:George Datseris。
难度:简单到中等再到困难,具体取决于项目。
时长:根据项目的不同,为175到350小时。
DynamicalSystems.jl是一个屡获殊荣的Julia软件库,用于动力系统、非线性动力学、确定性混沌和非线性时间序列分析。它拥有令人印象深刻的功能列表,但永远不会嫌多。在这个项目中,贡献者将能够用新的算法丰富DynamicalSystems.jl,并丰富他们对非线性动力学和计算机辅助探索复杂系统的知识。
我们在这里没有概述可能的项目,而是邀请感兴趣的候选人联系DynamicalSystems.jl或其子包的开发人员之一,以制定项目大纲。我们热烈欢迎已经想到潜在项目想法的候选人。要获得项目想法,我们建议查看DynamicalSystems.jl子包中未解决问题的列表。
先决条件:已经为JuliaDynamics中的Julia包或与JuliaDynamics足够相关的包做出贡献。
推荐技能:熟悉非线性动力学和/或微分方程和/或数据分析以及Julia语言。
预期结果:记录良好、测试良好的DynamicalSystems.jl的新算法。
JuliaGenAI是一个专注于推进生成式AI研究并寻找其在Julia编程语言生态系统中的应用的组织。我们的社区由AI研究人员、开发人员和对利用Julia的高性能功能推动生成式AI边界充满热情的爱好者组成。我们努力创建利用Julia在处理复杂AI挑战方面的独特优势的创新工具和解决方案。
与以下组织有高度重叠,你可能也感兴趣
使用MLJ.jl的项目 - 适用于更传统的机器学习项目
强化学习项目 - 针对 AlphaZero.jl 相关的项目
FluxML 项目 - 针对 Flux.jl 的项目,Flux.jl 是 Julia 深度学习生态系统的核心
项目概述:Llama2.jl 是 Llama 架构的 Julia 原生移植,最初基于 llama2.c。该项目旨在通过实现 KernelAbstraction.jl 来增强 Llama2.jl 的 GPU 支持,从而显著提高其性能。
项目难度:困难
预计时长:350 小时
理想候选人画像
精通 Julia 编程
了解 GPU 计算
有使用 KernelAbstractions.jl 的经验
项目目标和交付成果
在 llama2.jl 中实现 GPU 支持
提供全面文档和示例,展示性能改进
为 llama2.jl 的现有代码库和文档做出贡献
项目概述:Llama.jl 是 llama.cpp 的 Julia 接口,为当今许多开源工具提供支持。它目前仅利用高级别二进制文件。该项目专注于为 llama.cpp 生成低级 C 接口,从而能够原生访问内部模型状态,这将开启令人难以置信的研究机会和有吸引力的应用(例如,约束生成、新颖的采样算法等)。
项目难度:困难
预计时长:175 小时
理想候选人画像
精通 Julia 和 C 编程
项目目标和交付成果
用于标记化和采样功能的自动生成 C 接口
在标记生成过程中访问 llama.cpp 中的内部模型状态
能够从给定模型状态生成文本
项目概述
Julia 作为一种高性能语言,在 GenAI 训练数据集中至关重要但代表性不足。AIHelpMe.jl 是我们一项雄心勃勃的计划,旨在通过提供上下文学习(RAG,提示)的方式增强大型语言模型(LLM)对 Julia 的理解,从而弥合这一差距。该项目专注于扩展嵌入式知识库,使其包含最新的、内容丰富的 Julia 信息,并优化问答管道以提供准确、相关的答案。通过将目标 Julia 代码片段和文档注入查询,AIHelpMe.jl 旨在显著提高生成式 AI 对全球 Julia 开发人员的准确性和实用性。
导师:Jan Siml / JuliaLang Slack 上的 @svilup
/ Julia Zulip 上的 Jan Siml
项目难度:中等
预计时长:175 小时
谁应该申请
对 Julia 编程语言有扎实理解,并渴望加深其在 Julia 和 AI 社区参与度的个人。
申请者应具备检索增强生成(RAG)优化技术的初步理解,并对改进 AI 技术充满热情。
项目目标和交付成果
知识库扩展:扩展 AIHelpMe.jl 知识库,使其包含来自关键 Julia 生态系统的全面、最新资源,例如 Julia 文档站点、DataFrames、Makie、Plots/StatsPlots、Tidier-verse、SciML 等。有关更多详细信息,请参阅 Github Issue。这种扩展对于丰富与 Julia 编程相关的 AI 生成的响应的上下文和准确性至关重要。
性能调整:在黄金问答数据集上至少提高 10% 的准确性和相关性,改进 AIHelpMe.jl 问答管道的性能。
项目概述
深入生成式 AI 和信息检索的前沿,将 ColBERT v2(一种最先进的文档检索和重新排序框架)引入 Julia 编程世界。该计划不仅旨在将 ColBERT v2 转换为在 Julia 中本地运行,还旨在将其与 AIHelpMe.jl(和其他下游库)无缝集成。这种集成有望通过提供本地托管、更具成本效益且高性能的文档搜索功能来彻底改变用户与 AI 的交互方式。通过使这项复杂的技术能够在本地运行,我们减少了对大型商业平台的依赖,确保了数据隐私和控制权,同时保持最小的内存开销。
导师:Jan Siml JuliaLang Slack 上的 @svilup
/ Julia Zulip 上的 Jan Siml
项目难度:困难
预计时长:350 小时
理想候选人画像
扎实理解 Transformer 架构,精通 Flux.jl 或 Transformers.jl。
具有语义文档检索(或检索增强生成应用)经验,并渴望突破 AI 技术的界限。
致力于开源开发,并热衷于为不断发展的基于 Julia 的 AI 工具生态系统做出贡献。
项目目标和预期成果
ColBERT v2 的原生 Julia 转换:成功地使 ColBERT v2 在 Julia 生态系统中运行。重点仅限于 ColBERT v2 的索引和检索功能,例如,您在 示例用法部分 中看到的检索和索引代码片段。有关指导,请参阅现有的索引和检索示例。
与 AIHelpMe.jl 集成:作为 AIHelpMe.jl(在 PromptingTools.jl 中定义)的嵌入和检索后端之一进行无缝集成。
包注册和文档:在 Julia 生态系统中注册功能齐全的包,并附带全面的文档和使用示例,以促进社区的采用和贡献。
项目概述
PromptingTools.jl 是 Julia GenAI 生态系统中的一个关键工具。该项目是一项协调一致的努力,旨在通过整合更广泛的提示模板和模式来拓宽 PromptingTools.jl 的实用性和适用性,从而满足各种 LLM 后端的需要。该计划直接对应于 PromptingTools.jl 的 GitHub 上的 Issue #67、Issue #68 和 Issue #69。通过增强库的功能以支持结构化提取(使用 Ollama 后端)并引入更多标准化的提示模式,我们的目标是使 PromptingTools.jl 成为与开源大型语言模型(LLM)交互的开发人员更强大、不可或缺的资源。
导师:Jan Siml / JuliaLang Slack 上的 @svilup
/ Julia Zulip 上的 Jan Siml
项目难度:中等
预计时长:175 小时
理想候选人画像
精通 Julia,并致力于 Julia AI 生态系统的发展。
有使用开源 LLM(例如 llama.cpp 和 vLLM)的经验,并熟悉提示工程的概念。
项目目标和交付成果
模式集成和功能增强:实现和集成各种常见的提示模式(详细信息请参阅 Issue #67)。为 render
和 aigenerate
函数开发方法,以便轻松使用和渲染这些模板,并附带全面的文档、示例和测试。
结构化提取支持:为 Ollama 后端添加 aiextract
支持,因为目前不支持此功能。这涉及创建方法和模板来促进结构化数据提取,从而拓宽使用案例并提高通过 PromptingTools.jl 与 AI 模型交互的效率。详细信息请参阅 Issue #68。将功能扩展到其他后端是一个加分项。
常见后端支持:扩展 PromptingTools.jl 的功能以支持常见后端(例如 HuggingFace Transformers 和 vLLM),确保库与各种 LLM 兼容。我们需要为每个后端创建一个示例来演示功能。详细信息请参阅 Issue #69
项目概述
作为 Julia 社区的重要资源,Julia LLM 排行榜 对用于 Julia 代码生成的开源模型进行基准测试。此增强项目旨在通过合并其他测试用例并将基准测试扩展到代码生成之外的特定于 Julia 的应用(例如,使用黄金问答数据集评估检索增强生成 (RAG) 应用以及许多其他应用)来扩展排行榜。该计划解决了几个 GitHub 问题,旨在提高排行榜的实用性和准确性,使其成为社区中不可或缺的工具。参与者将有机会加深他们对生成式 AI 的了解,同时为一个项目做出贡献,该项目增强了 Julia 社区如何为其需求选择最有效的 AI 模型。
导师:Jan Siml / JuliaLang Slack 上的 @svilup
/ Julia Zulip 上的 Jan Siml
项目难度:简单/中等
预计时长:175 小时
理想候选人画像
精通 Julia,并积极参与 Julia 社区。
具备生成式 AI 的基础知识或兴趣,并渴望通过实际应用了解更多知识。
热衷于为开源项目做出贡献,并希望帮助 Julia 社区确定最有效的 AI 模型以满足其需求。
项目目标和交付成果
测试用例扩展:开发和集成各种测试用例,以更全面地评估 LLM 在 Julia 代码生成方面的能力,增强排行榜的稳健性和可靠性。详细信息请参阅 此处。
基准测试扩展:扩展排行榜的基准测试功能,以包括对 RAG 应用(问答系统)的评估,重点关注其对 Julia 编程语言的了解,以及其他 Julia 任务,例如“帮我加速这段代码”、“编写这段代码的更惯用方式是什么”等等。这与项目 3 略有重叠,但是,这里的重点是确定具有强大整体能力的有希望的本地托管模型。详细信息请参阅 此处。
文档和推广:在一系列博文中记录发现和最佳实践,以分享见解,突出显示表现最佳的模型,并指导社区在 Julia 生态系统中有效地利用生成式 AI。
项目概述:该项目旨在扩展 CounterfactualExplanations.jl 的功能,使其支持大型语言模型(LLM)。作为其基础,还需要实现对 LLM 特征归因的计算支持。该项目将同时为 Taija 和 JuliaGenAI 做出贡献。
导师:Jan Siml (JuliaGenAI) 和 Patrick Altmeyer (Taija)
项目难度:中等
预计时长:175 小时
理想候选人画像
有使用 Julia 和多重调度的经验,但不是关键
良好的机器学习和统计学知识
良好的大型语言模型 (LLM) 理解
理想情况下,之前有使用 Transformers.jl 的经验
项目目标和交付成果
仔细考虑架构选择:我们如何将对 LLM 的支持融入 CounterfactualExplanations.jl 的现有代码库中?
全面测试和记录您的工作
我们很乐意听取您的想法并与您讨论潜在的项目。
可能最简单的方法是加入我们的 JuliaLang Slack 并加入 #generative-ai
频道。您也可以通过 Julia Zulip 联系我们,或在我们的网站 JuliaGenAI 上发布 GitHub Issue。
JuliaHealth 是一家致力于通过推广开源技术和数据标准来改善医疗保健的组织。我们的社区由研究人员、数据科学家、软件开发人员和医疗保健专业人员组成,他们热衷于利用技术改善患者预后并促进数据驱动的决策。我们相信,通过共同努力,共享我们的知识和专业技能,我们可以创造出具有变革医疗保健潜力的强大工具和解决方案。
描述: OMOP 通用数据模型 (OMOP CDM) 是一种广泛使用的数据标准,它允许研究人员以一致且高效的方式分析大型、异构的医疗保健数据集。JuliaHealth 有几个软件包可以与遵循 OMOP CDM 的数据库交互(例如 OMOPCDMCohortCreator.jl 或 OMOPCDMDatabaseConnector.jl)。对于这个项目,我们正在寻找对进一步开发 Julia 中与 OMOP CDM 数据库交互的工具感兴趣的学生。
导师: Jacob Zelko(又名 TheCedarPrince) [电子邮件:jacobszelko@gmail.com]
难度:中等
时长:350 小时
建议的技能和背景:
Julia 经验
熟悉以下一些 Julia 包将是一项强大的优势
FunSQL.jl
DataFrames.jl
Distributed.jl
OMOPCDMCohortCreator.jl
OMOPCDMDatabaseConnector.jl
OMOPCommonDataModel.jl
熟悉 OMOP 通用数据模型(或愿意学习!)
潜在成果
一些潜在的项目成果可能是
扩展 OMOPCDMCohortCreator.jl 以使用户能够为他们想要创建的潜在患者人群添加约束,例如给定药物或疾病诊断的条件日期范围。
在开发患者人群时,支持基于 OMOPCDMCohortCreator.jl 查询的并行化。
开发和探索 OMOPCDMCohortCreator.jl 中的人群过滤器如何组合以进行快速分析的新方法。
对于 JuliaHealth 中开发的任何功能,也期望学生为现有软件包文档做出贡献,以突出显示如何使用新功能。虽然不是必需的,但如果学生希望将来向 JuliaCon 提交闪电演讲、海报等关于他们工作的成果,我们将支持他们的努力!
如果您有兴趣并希望讨论在这个项目过程中还可以追求什么,请联系该项目的导师。
描述: 患者水平预测 (PLP) 是医疗保健研究中一个重要的领域,它涉及使用患者数据来预测疾病进展、治疗反应和住院再入院等结果。JuliaHealth 有兴趣开发用于 PLP 的工具,这些工具利用历史患者数据,例如遵循 OMOP 通用数据模型 (OMOP CDM) 的患者医疗索赔或电子健康记录,这是一种广泛使用的数据标准,它允许研究人员以一致且高效的方式分析大型、异构的医疗保健数据集。对于这个项目,我们正在寻找对在 Julia 中开发 PLP 工具感兴趣的学生。
导师:Sebastian Vollmer [电子邮件:sjvollmer@gmail.com],Jacob Zelko(又名 TheCedarPrince) [电子邮件:jacobszelko@gmail.com]
难度:困难
时长:350 小时
建议的技能和背景:
Julia 经验
接触机器学习概念和思想
熟悉以下一些 Julia 包将是一项强大的优势
DataFrames.jl
OMOPCDMCohortCreator.jl
MLJ.jl
ModelingToolkit.jl
熟悉 OMOP 通用数据模型(或愿意学习)
成果
这个项目本质上将是非常实验性和探索性的。为了限制对该项目的期望,以下可能是学生在该项目中遵循的方法
回顾 PLP 方法的现有文献
熟悉 Julia 生态系统中机器学习和预测的工具
确定 PLP 研究问题以推动软件包开发
开发利用 JuliaHealth 工具与 OMOP CDM 数据库交互的 PLP 软件包
测试和验证 PLP 软件包以调查研究问题
记录发现并起草 JuliaCon 演讲
对于 JuliaHealth 中开发的任何功能,也期望学生为现有软件包文档做出贡献,以突出显示如何使用新功能。对于此项目,预计作为提案的一部分,将追求起草并在 JuliaCon 上发表演讲。此外,虽然不是必需的,但鼓励并在项目导师的支持下在 JuliaCon 论文集中发表。
此外,根据软件包的成功情况,有可能对实际患者数据运行实验,以根据选定的研究问题生成实际患者人群的见解。这可能会变成单独的研究论文、会议提交或海报提交。无论在这种情况下发生什么,项目导师都会提供支持。
MedPipe3D.jl 以及 MedEye3D.jl MedEval3D.jl 和目前正在开发的 MedImage.jl 是一组库,旨在为 Julia 语言生态系统提供 3D 医学成像的基本工具。
MedImage 是一个用于标准化加载医学成像数据及其基本处理的软件包,并考虑其空间元数据。MedEye3D 是一个支持医学成像数据显示的软件包。MedEval3D 已经实现了一些高性能算法,用于计算评估 3d 分割模型性能所需的指标。MedPipe3D 是作为一个软件包创建的,它改善了小型生态系统(MedEye3D、MedEval3D 和 MedImage)其他部分之间的集成。
描述: MedEye3D 是一个支持医学成像数据显示的软件包。它包含多个特定于此用例的功能,例如自动窗口化以显示软组织、肺部和其他组织。显示考虑了体素间距、多模态成像叠加显示的支持等等。所有这些都由 OpenGL 和 Rocket.jl 提供的高性能支持。尽管如此,仍然可以进行许多进一步的改进,并在“潜在成果”部分进行了描述。
导师:Jakub Mitura [电子邮件:jakub.mitura14@gmail.com]
难度:困难
时长:350 小时
建议的技能和背景:
潜在成果
尽管 MedEye3D 已经支持显示医学图像,但仍然有一些功能对于实现一些更高级的算法(如超体素分割或图像配准)非常有用(并且这两者对于解决医学成像中许多重要问题至关重要)。为了实现这一点,该项目的目标是实现。
开发对多图像查看的支持,并使用图像配准指示器,例如显示边界和显示连接点的线。
MRI 和 PET 的自动正确窗口化。
支持超体素 (sv) 的显示。显示 sv 的边界;指示图像的梯度是否与 sv 边界一致。
提高启动时间。
通过提供高级函数简化基本用法。
成功标准和所需时间:如何定义上述功能的成功以及每个功能的大概所需时间。
用户可以加载 2 个不同的图像,它们将并排显示。在滚动过程中,应根据提供的元数据显示身体的同一区域(对于已正确配准的样本图像)。当在其中一个图像上移动鼠标光标时,应显示另一个图像上同一物理位置的光标位置(根据空间元数据计算出的物理位置)。120 小时
给定最常见的 PET 和 MRI 模态(随机 FDG PET/CT 和 MRI 上的 T2、T1、FLAIR、ADC、DWI) - 用户将看到类似于 3DSlicer 中自动显示的图像 - 10 小时
给定一个整数掩码,其中唯一整数表示将编码有关单个超体素的信息,以及基础的 3d 医学图像,用户可以选择将原始图像与超像素的边界叠加,其中相邻边界将具有不同的颜色,或在卷积边缘滤波器(例如 Sobel 滤波器)的图像背景上显示这些边界 - 180 小时
查看器启动时间的任何可衡量的减少 - 20 小时
用户只需将 MedImage.jl 库中的 MedImage 对象提供给单个显示函数即可显示图像 - 20 小时
描述: MedPipe3D 是作为一个软件包创建的,它改善了小型生态系统(MedEye3D、MedEval3D 和 MedImage)其他部分之间的集成。目前,它需要扩展和调整,以便它可以成为功能齐全的医学成像管道的基础。它需要特定于医学成像的预处理实用程序 - 例如间距、方向、裁剪或填充的统一化。它需要 k 折交叉验证和简单的集成。分割管道中的其他必要部分是增强,这些增强应该更容易使用,并为不确定性量化提供测试时间增强。管道中的最后一件事对于从业者也很重要,即后处理 - 最流行的后处理是查找并仅保留最大的连通分量。
导师:Jakub Mitura [电子邮件:jakub.mitura14@gmail.com]
难度:中等
时长:350 小时
建议的技能和背景:
Julia 经验
熟悉以下一些 Julia 包将是一项强大的优势
MedEye3D.jl
MedEval3D.jl
潜在成果
集成增强,如旋转召回伽马等。
启用可逆增强并支持测试时间增强。
添加基于补丁的数据加载,并进行概率过采样。
计算中值和平均间距,并启用将重新采样应用于数据集的中值或平均间距。
添加基本的后处理,例如最大的连通分量分析。
在结构或字典中设置所有超参数(增强;补丁大小,从概率获取二值掩码的阈值),以启用超参数调整。
启用在验证时期自动显示算法输出,包括将此类输出保存到持久存储中。
支持 k 折交叉验证。
尽管这组更改在实现上非常耗时,但对于任何具有 Julia 编程语言经验的人来说都不应该构成重大问题。但是,实现这些更改将是使 Julia 语言成为在开发端到端医学成像分割算法方面替代 Python 的良好选择的一大步。
成功标准和所需时间:如何定义上述功能的成功以及每个功能的大概所需时间。
给定用户提供的配置结构,加载图像后将以一些定义的概率执行提供的增强:亮度变换、对比度增强变换、伽马变换、高斯噪声变换、莱斯噪声变换、镜像变换、缩放变换、高斯模糊变换、模拟低分辨率变换、弹性变形变换 -100 小时。
启用对模型输入执行某些变换,然后对模型输出执行此变换的逆变换;当用户提供 n 时,执行 n 次模型推理,并将模型产生的分割掩码的均值和标准差作为输出 -60 小时。
给定用户指定的 3D 补丁大小,算法在数据加载后将裁剪或填充提供的图像以满足设定的尺寸标准。在裁剪过程中,应比没有标签的区域更频繁地选择存在标签的图像部分,存在一些标签指示的分割掩码区域被选择的概率将等于 p (0-1),其中 p 由用户提供 -40 小时。
给定医学图像路径列表,它将加载它们计算平均或中值间距(用户选择的选项),并返回它。然后在管道执行期间,所有图像都应重新采样到用户提供的间距和用户提供的方向 - 40 小时。
给定模型输出和一个用于输出每个通道的阈值,用于将输出二值化,用户可以选择仅从二值化算法输出中检索 n 个最大的分量 - 20 小时。
所有增强方法的概率和超参数、输出通道二值化的阈值、预处理选择的间距、测试时增强方法的数量和设置都应在 hyperparam 结构体中提供,该结构体是管道函数的附加参数,可用于超参数调整 -30 小时。
在验证 epoch 期间,可以将图像保存到持久存储中,并在训练期间将单个随机图像与输出掩码一起加载到 MedEye3d 中进行可视化 -30 小时。
用户可以设置 val_percentage(这将导致数据集划分为训练和验证折叠)或提供 k(这将导致 k 折交叉验证)。在后一种情况下,集成体的均值、阈值和标准差将作为模型的最终输出返回 -30 小时。
对于每个点,导师还将向负责实施的人员提供所需功能的 Python 示例,或指向已实现这些功能的 Julia 库(只需集成即可)。
描述: KomaMRI.jl 是一个用于高效磁共振成像 (MRI) 模拟的 Julia 包,用于教育和研究目的。模拟有助于理解难以理解的 MRI 概念,例如脉冲序列、信号生成和采集。此外,它们可以指导新型脉冲序列的设计,并生成用于训练机器学习模型的合成数据。
目前,我们的模拟器使用 CUDA 数组执行 GPU 加速计算。我们现在正在推进实施一种新的模拟方法 (BlochKernel<:SimulationMethod
),该方法基于使用 KernelAbstractions.jl 的 GPU 内核编程。此增强功能不仅可以提高计算速度,还可以通过 KernelAbstractions.jl 的多供应商 GPU 支持扩展可访问性。这可以使 MRI 模拟在迭代算法中用于解决反问题。我们正在寻找对开发此功能感兴趣的热心人士。
导师: Carlos Castillo [邮箱:cncastillo@uc.cl],Boris Oróstica [邮箱:beorostica@uc.cl],Pablo Irarrazaval [邮箱:pim@uc.cl]
难度: 困难
持续时间: 350 小时(2 个月,每天 8 小时)
建议的技能和背景
Julia 经验
接触 MRI 概念和思想
高级 GPU 编程知识
熟悉以下一些 Julia 包将是理想的
KernelAbstractions.jl
CUDA.jl
Adapt.jl
Functors.jl
成果:
我们期望在本项目结束时获得以下成果
扩展和/或改进 GPU 加速模拟,生成了一种新的具有多供应商 GPU 支持的模拟方法 BlochKernel
。
开发说明文档,解释新的模拟方法,包括展示一些用例示例。
在 Buildkite 上实现自动管道,以在多个 GPU 架构上测试模拟。
报告 BlochKernel
和 Bloch
之间的性能改进。
如果您有兴趣并希望讨论在项目过程中可以追求的其他方面,请联系本项目的导师。
JuliaMusic 是一个提供软件包和功能的组织,允许分析音乐表演的属性。
难度:中等。
时长:350 小时。
分析音乐中的时间和强度波动(即 MIDI 数据的形式)很容易。此格式已数字化,并且像 MIDI.jl 和 MusicManipulations.jl 这样的包允许无缝数据处理。但可以说,最有趣的音乐类型是现场音乐。现场音乐表演以波形格式录制。存在一些可以检测音乐击打的“起始”的算法,但它们通常只关注时间信息,因此放弃了检测例如演奏音符的强度。此外,在线上几乎没有针对此问题的代码实现,几乎所有这些代码都是旧的且未维护的。我们希望在 MusicProcessing.jl 中实现一个算法,该算法给定单个乐器的录音,就可以将其“MIDI 化”,这意味着将其数字化为 MIDI 格式。
推荐技能:音乐背景,熟悉数字信号处理。
预期结果:MusicProcessing.jl 中经过良好测试且记录良好的函数 midify
。
导师:George Datseris。
JuliaReach 是用于动态系统可达性计算的 Julia 生态系统。基于集合的可达性的应用领域包括形式验证、控制器综合和在不确定模型参数或输入下的估计。有关更多背景信息,请访问 JuliaReach zulip 流。您还可以参考综述文章 Set Propagation Techniques for Reachability Analysis。
难度:中等。
描述。 LazySets 是 JuliaReach 的核心库。它提供了一种使用几何集合进行符号计算的方法,重点是延迟集合表示和高效的高维处理。该库已在文章 LazySets.jl: Scalable Symbolic-Numeric Set Computations 中进行了描述。
该项目的主要兴趣在于实现利用集合结构的算法。典型的示例包括多胞形和带形体(凸)、多项式带形体和泰勒模型(非凸),仅举几例。
预期结果。 目标是实现文献中某些高效的最先进算法。代码需要记录、测试并在基准测试中进行评估。具体任务可能包括(由候选人的兴趣驱动):带形体 的高效顶点枚举;多项式带形体上的运算;带形体束 上的运算;不同集合类型之间的高效不相交性检查;复杂带形体。
预期时长。 175 小时。
推荐技能。 必须熟悉 Julia 和 Git/GitHub。建议熟悉 LazySets。基本几何术语知识值得赞赏,但不是必需的。
导师:Marcelo Forets,Christian Schilling。
难度:中等。
描述。 稀疏多项式带形体是一种新的非凸集合表示,非常适合非线性动态系统的可达性分析。该项目是 GSoC'2022 - Reachability with sparse polynomial zonotopes 的延续,该项目在 LazySets 中实现了基础知识。
预期结果。 预计将在 ReachabilityAnalysis 中添加用于动态系统可达性算法的高效 Julia 实现,该算法利用多项式带形体。成功的项目应该
复制文章 [Reachability Analysis for Linear Systems with Uncertain Parameters using Polynomial Zonotopes
](https://dl.acm.org/doi/abs/10.1145/3575870.3587130) 中的结果。
代码应在基准测试中进行广泛记录、测试和评估。
对于有抱负的候选人,可以与 ClosedLoopReachability.jl 中实现的神经网络控制系统建立联系。
预期时长。 175 小时。
推荐技能。 必须熟悉 Julia 和 Git/GitHub。熟悉提到的 Julia 包值得赞赏,但不是必需的。该项目不需要理论贡献,但需要阅读研究文献,因此建议具有一定的学术经验。
文献和相关软件包。 此视频 解释了多项式带形体的概念(幻灯片此处)。相关理论在 这篇研究文章 中进行了描述。在 CORA 中存在一个 Matlab 实现(多项式带形体的实现可以在 此文件夹 中找到)。
导师:Marcelo Forets,Christian Schilling。
难度:中等。
描述。 ReachabilityAnalysis 是一个用于动态系统集合传播的 Julia 库。主要目标之一是处理具有混合离散连续行为的系统(在文献中称为混合系统)。本项目将专注于增强库的功能并全面改进用户生态系统。
预期结果。 具体任务可能包括:混合系统的特定问题启发式方法;时变输入集的 API;流管下近似。代码需要记录、测试并在基准测试中进行评估。如果感兴趣,还可以考虑与 ModelingToolkit.jl 集成。
预期时长。 175 小时。
推荐技能。 必须熟悉 Julia 和 Git/GitHub。欢迎但不要求熟悉 LazySets 和 ReachabilityAnalysis。
导师:Marcelo Forets,Christian Schilling。
JuliaStats 是一个致力于为 Julia 提供高质量统计软件包的组织。
在 Julia 中实现面板分析模型和估计器。
难度。中等。持续时间。350 小时
面板数据是一种重要的统计数据,它处理跨时间的多个单位的观测值。面板数据的常见示例包括经济统计数据(在其中观察多个国家/地区随时间的变化情况很常见)。纵向和横截面数据的这种组合对于从数据中提取因果结构非常强大。
导师。 Nils Gudat,José Bayoán Santiago Calderón,Carlos Parada
必须至少精通一种统计计算语言,并愿意在项目开始前学习 Julia。
掌握涵盖最大似然估计、置信区间和假设检验等主题的基本统计推断知识。(申请前必须掌握。)
熟悉时间序列统计(例如 ARIMA 模型、自相关)或面板数据。(申请后可以学习。)
参与者将
学习和借鉴过去的面板数据分析方法和软件包,例如 Econometrics.jl 和 SynthControl.jl 中的软件包。
将 TreatmentPanels.jl 概括为一个用于处理和操作面板数据的抽象接口。
将 Econometrics.jl 等软件包提供的现有估计器集成到一个面板数据估计软件包中。
Econometric Analysis of Cross Section and Panel Data by Jeffrey Wooldridge
Distributions.jl 是一个提供基本概率分布和相关函数的软件包。
难度。 简单-中等。持续时间。 175-350 小时
必须精通 Julia。
概率的大学水平介绍,涵盖概率密度函数、矩和累积量以及多元分布等主题。
Distributions.jl 的可能改进包括
新的分布族,例如椭圆分布或顺序统计分布。
当前分布的其他参数化和关键字构造函数。
扩展对变换变量分布的支持。
HypothesisTesting.jl 是一个实现一系列假设检验的软件包。
难度。 中等。时长。 350 小时
必须精通 Julia。
概率的大学水平介绍,涵盖概率密度函数、矩和累积量以及多元分布等主题。
Distributions.jl 的改进包括
开发针对异方差性的 Breusch-Pagan 检验
开发 Harvey-Collier 线性检验
开发 Bartlet 秩检验以检验随机性
开发 Wilcoxon–Mann–Whitney (WMW) 检验的精确动态规划解
Alexander Marx 等人 (2016) “Wilcoxon–Mann–Whitney 检验的精确动态规划解” 基因组学蛋白质组学生物信息学,14,55-61
在 Julia 中实现统计建模的一致 API。
难度。 中等。时长。 350 小时
目前,Julia 统计生态系统非常分散。为各种统计模型提供一致的 API 具有价值。 CRRao.jl 包提供了这种设计。
必须精通 Julia。
涵盖最大似然估计、置信区间和假设检验等主题的基本统计推断。
参与者将
帮助创建、测试和记录 Julia 的标准统计 API。
集成 MixedModels.jl
根据参与者的兴趣,对 JuliaStats 包进行一般改进。
难度。 易到难。时长。 175-350 小时。
JuliaStats 提供了 Julia 中许多最流行的包,包括
StatsBase.jl 用于基本统计(例如权重、样本统计量、矩)。
MixedModels.jl 用于随机和混合效应线性模型。
GLM.jl 用于广义线性模型。
所有这些包对 Julia 统计社区都至关重要,并且都可以改进。
导师。 Mousum Dutta,Ayush Patnaik,Carlos Parada
必须至少精通一种统计计算语言,并愿意在项目开始前学习 Julia。
了解涵盖最大似然估计、置信区间和假设检验等主题的基本统计推断。
参与者将
让 JuliaStats 变得更好!这可能包括额外的估计量、新功能、性能改进或您感兴趣的任何其他内容。
StatsBase.jl 的改进可能包括对累积量、L 矩或其他估计量的支持。
改进的非参数密度估计器,例如 R 的 Locfit 中的那些。
此包用于研究复杂调查数据。现实世界调查的例子包括经济、健康和农业等领域的官方政府调查;财务和商业调查。社会和行为科学家,如政治学家、社会学家、心理学家、生物学家和宏观经济学家,也在学术和理论环境中分析调查。随着在线管理调查变得更容易,“大型”调查数据集的普及率激增。该项目旨在利用 Julia 的性能增强来创建一个适用于现代“大型”调查的快速包。
难度。 易到难。时长。 175-350 小时
导师。 Ayush Patnaik
至少精通一门统计计算语言(Julia、R、Python、SAS、Stata 等),并愿意在项目开始前学习 Julia。
了解基本的统计和概率概念,最好是从学术课程中学习。
(额外加分)任何先前使用任何软件或工具进行调查分析的经验或课程。
该项目可以根据参与者的背景和兴趣进行调整,并且根据能力,可以创建几个独立的小项目。参与者可以潜在地从事
使用泰勒线性化的广义方差估计方法
后分层、整理或校准、GREG 估计和相关方法。
将 Survey.jl 与 FreqTable.jl 连接以进行列联表分析,或与生存分析或机器学习库连接。
改进对带或不带替换的多阶段和概率与规模成比例 (PPS) 抽样的支持。
关联检验(使用列联表)、Rao-Scott、glm 的似然比检验、Cox 模型、对数线性模型。
处理缺失数据,例如 mitools 的插补。
Survey.jl - 查看一些问题、过去的 PR 和里程碑想法
Julia 讨论帖子,征求社区建议 此处
JuliaCon 统计研讨会 剪辑 适用于 Survey
模型辅助抽样 - Sarndal、Swensson、Wretman (1992)
R 中的调查分析,了解可以为 Julia 实现的高级主题
贡献者实现了一种最先进的平滑器,用于具有加性高斯噪声的连续时间系统。系统的动力学可以用一个具有局部加性高斯随机波动的常微分方程来描述,换句话说,是一个随机常微分方程。
给定一系列随时间观察到的测量值,包含统计噪声和其他不准确性,任务是产生对导致观察结果的系统未知轨迹的估计。
线性连续时间系统使用固定滞后 Kalman-Bucy 平滑器(与 Kalman–Bucy 滤波器 相关)进行平滑。它依赖于耦合的 ODE,描述了潜伏系统状态的条件分布的均值和协方差如何随时间演变。Julia 中缺少通用的实现。
预期成果:构建连续随机动力系统的非线性平滑的有效实现。
推荐技能:高斯随机变量、贝叶斯公式、随机微分方程
评级:困难,350 小时
注意:FluxML 作为 NumFOCUS 子组织参与。前往 FluxML GSoC 页面 了解他们的想法列表。
时间:175 小时
开发一系列强化学习环境,类似于 OpenAI Gym。虽然我们有可用的 gym 包装器,但它很难安装(由于 Python 依赖项),并且由于它是用 Python 和 C 代码编写的,因此我们无法使用它做更多有趣的事情(例如通过环境进行微分)。
一个纯 Julia 版本的选择环境,支持类似的 API 和可视化选项,对于任何使用 Flux 进行 RL 的人都很有价值。
导师:Dhairya Gandhi。
AlphaZero.jl 项目的理念是提供一个 AlphaZero 的实现,该实现足够简单,以便贡献者和研究人员能够广泛访问,同时又足够强大和快速,以便能够在有限的计算资源上进行有意义的实验(我们最新的版本始终比竞争对手的 Python 实现快一到两个数量级)。
以下是一些基于 AlphaZero.jl 的项目想法。请与我们联系以获取更多详细信息,并告知我们您的经验和兴趣,以便我们可以构建最适合您个人资料的项目。
[简单 (175 小时)] 将 AlphaZero.jl 与 OpenSpiel 游戏库集成,并在一系列简单的棋盘游戏中对其进行基准测试。
[中等 (175 小时)] 使用 AlphaZero.jl 训练一个国际象棋代理。为了节省计算资源并允许更快地引导,您可以使用监督学习来训练初始策略。
[困难 (350 小时)] 在 AlphaZero.jl 的基础上实现 MuZero 算法。
[困难 (350 小时)] 探索 AlphaZero 在棋盘游戏之外的应用(例如定理证明、芯片设计、化学合成……)。
在所有这些项目中,目标不仅是展示当前的 Julia 生态系统并测试其极限,而且是通过其他人可以构建的具体贡献来推动它向前发展。这些贡献包括
通过代码、文档或基准测试改进现有 Julia 包(例如 AlphaZero、ReinforcementLearning、CommonRLInterface、Dagger、Distributed、CUDA……)。
一个有据可查且可复制的工件,将添加到 AlphaZero.Examples、ReinforcementLearningZoo 或在其自己的包中发布。
一篇博客文章,详细介绍您的经验,讨论您遇到的挑战并确定未来工作的有希望的领域。
科学的许多方面都可以通过分子的运动和相互作用来解释。分子动力学 (MD) 是一种用于探索这些现象的计算技术,从惰性气体到生物大分子。 Molly.jl 是一个用于 MD 的纯 Julia 包,以及更广泛地用于物理系统模拟的包。该包目前正在开发中,重点关注蛋白质和可微分子模拟。有许多方法可以改进该包
机器学习势能(时长:175 小时,预期难度:易到中):在过去几年中,机器学习势能得到了显着改进。可以将 ANI、ACE、NequIP 和 Allegro 等模型添加到 Molly 中。
更好的 GPU 性能(时长:175 小时,预期难度:中等):可以编写自定义 GPU 内核以显着加快分子模拟速度,并使 Molly 的性能与成熟软件相当。
约束算法(时长:175 小时,预期难度:中等):许多模拟使用 SHAKE、RATTLE 和 SETTLE 等方法固定快速自由度,例如键长和键角。这些算法的快速实现将是一项宝贵的贡献。
静电求和(时长:175 小时,预期难度:中等到困难):粒子网格 Ewald (PME) 等方法广泛用于分子模拟。开发快速、灵活的实现并探索与 GPU 加速和自动微分的兼容性将是一项 重要贡献。
推荐技能:熟悉计算化学、结构生物信息学或模拟物理系统。
预期成果:向包中添加新功能以及测试和相关文档。
导师:Joe Greener
联系方式:请随时通过 电子邮件 或 Julia Slack 上的 #juliamolsim 提出问题 此处。
矩阵函数将矩阵映射到其他矩阵,并且通常可以解释为普通函数(如正弦和指数)的推广,这些函数将数字映射到数字。矩阵函数曾经被认为是数值算法的一个利基领域,现在经常出现在密码学、飞机设计、非线性动力学和金融等应用中。
本项目提议实现最先进的算法,扩展 Julia 中当前可用的矩阵函数,如问题 #5840 中所述。除了实矩阵幂、方根和对数等标准函数的矩阵推广外,参与者还将面临设计通用接口的挑战,用于将一般的标量值函数提升到其矩阵模拟,以高效计算任意(良好行为的)矩阵函数及其导数。
推荐技能:扎实的微积分和数值分析基础。
预期成果:用于评估矩阵函数的新方法和更快的方法。
难度:困难
Julia 目前支持大整数和有理数,利用了 GMP。但是,GMP 目前不允许与垃圾回收器良好集成。
因此,本项目涉及探索改进 BigInt 的方法,可能包括
修改 GMP 以支持高性能垃圾回收
在 Julia 中重新实现 BigInt 的某些方面
可以重写项或应用优化的惰性图样式 API
此实验可以作为具有新实现的包进行,也可以作为对 Base 中现有实现的修补程序进行。
预期成果:在 Julia 中实现 BigInt,其性能优于当前版本。
所需技能:熟悉扩展精度数值或性能考虑因素。熟悉 Julia 或 GMP。
导师:詹姆森·纳什
难度:困难
作为一种技术计算语言,Julia 提供了大量的特殊函数,既包括在 Base 中,也包括在 StatsFuns.jl 等包中。目前,许多这些函数是在外部库(如 Rmath 和 openspecfun)中实现的。本项目将涉及在原生 Julia 中实现这些函数(可能利用 SpecialFunctions.jl 中的工作),并在此过程中寻找改进机会,例如支持Float32
和 BigFloat
、利用融合乘加运算以及改进错误和边界情况。
推荐技能:扎实的微积分基础。
预期成果:用于评估特殊函数属性的新方法和更快的方法。
导师:史蒂文·约翰逊,奥斯卡·史密斯。请在 Discourse 或 Slack 上提问
由 Svanberg (2001) 提出的 CCSA 算法是一种 非线性规划算法,广泛应用于 拓扑优化 和其他大型优化问题:它是一种稳健的算法,可以处理任意非线性不等式约束和大量自由度。此外,该算法的相对简单性使得可以轻松地将雅可比矩阵中的稀疏性(用于处理大量约束)、近似 Hessian 预处理器以及目标或约束中仿射项的特殊情况优化结合起来。但是,目前它只能通过 NLopt.jl 接口在 Julia 中访问外部 C 实现,这极大地限制了其灵活性。
推荐技能:非线性优化算法经验以及对 拉格朗日对偶 的理解,熟悉稀疏矩阵和其他 Julia 数据结构。
预期成果:一个实现原生 Julia CCSA 算法的包。
导师:史蒂文·约翰逊。
在 2021 年 JuliaCon 上,引入了一种新的采样器蒙特卡罗方法(例如,作为贝叶斯推理中后验的采样算法)[1]。该方法利用分解结构来并行地对目标为联合分布的单个连续时间马尔可夫链进行采样。与该方法中的并行吉布斯采样相比,在任何时候都不会保持坐标的子集固定。在吉布斯采样中,保持子集固定是实现大规模并行化的主要手段:给定一组分离的坐标,条件后验分解成独立的子问题。在所提出的方法中,表示从后验中采样的参数向量的粒子永远不会停止移动,只有关于运动方向变化的决策会在坐标的子集上并行发生。
已经有两种可用的实现利用了 Julia 的多线程功能。从那里开始,贡献者使用 GPU 计算技术实现了该算法的一个版本,因为该方法适合于这些方法。
预期成果:使用 GPU 计算实现大规模并行分解弹性粒子采样器 [1,2]。
推荐技能:GPU 计算、马尔可夫过程、贝叶斯推理。
评级:困难,350 小时
[1] 莫里茨·沙尔:ZigZagBoomerang.jl - 并行推理和变量选择。JuliaCon 2021 贡献 [https://pretalx.com/juliacon2021/talk/LUVWJZ/],Youtube:[https://www.youtube.com/watch?v=wJAjP_I1BnQ],2021 年。
[2] 乔里斯·比尔肯斯、保罗·菲恩黑德、加雷斯·罗伯茨:Zig-Zag 过程和大数据贝叶斯分析的超高效采样。统计年鉴,2019 年,47 卷,第 3 期,第 1288-1320 页。[https://arxiv.org/abs/1607.03188]。
遗憾的是,今年我们没有时间指导。 请明年再来!
Pythia 是一个用于在 Julia 中进行可扩展机器学习时间序列预测和临近预测的包。
本项目涉及开发用于临近预测和预测的可扩展机器学习时间序列回归。经济学中的临近预测是指预测经济指标的当前、近期未来和最近过去的状况。该术语是“现在”和“预测”的缩写,起源于气象学。
本项目的目的是引入可扩展的基于回归的临近预测和预测方法,这些方法最近在数据丰富的环境中证明了其经验上的成功。其他平台上现有的流行的基于回归的临近预测包的示例包括“MIDAS Matlab 工具箱”,以及 R 中的 'midasr' 和 'midasml' 包。本项目的起点是从 R 移植 'midasml' 包到 Julia。目前,Pythia 具有用于预测的稀疏组 LASSO 回归功能。
以下函数值得关注:样本内和样本外预测/临近预测、具有勒壤得多项式的正则化 MIDAS、临近预测的可视化、AIC/BIC 和时间序列交叉验证调整、预测评估、用于预测和临近预测的合并和固定效应面板数据回归、稀疏组 LASSO 的基于 HAC 的推理、高维格兰杰因果检验。R/Python/Matlab 中的其他广泛使用的现有函数也值得关注。
推荐技能:研究生水平的时间序列分析、机器学习和优化知识很有帮助。
预期输出:贡献者预计将生成代码、文档、可视化和真实数据示例。
参考文献:请联系项目导师获取参考文献。
现代商业应用通常涉及预测数十万个时间序列。产生如此大量的可靠和高质量的预测在计算上具有挑战性,这限制了在实践中可以使用的潜在方法的范围,例如,参见 R 中的 'forecast'、'fable' 或 'prophet' 包。目前,Julia 缺乏可扩展的时间序列预测功能,本项目旨在开发自动化数据驱动和可扩展的时间序列预测方法。
以下功能值得关注:间歇需求预测(克罗森、调整后的克罗森、INARMA)、具有协变量的可扩展季节性 ARIMA、基于损失的预测(梯度提升)、无监督时间序列聚类、预测组合、单位根检验(ADF、KPSS)。R/Python/Matlab 中的其他广泛使用的现有函数也值得关注。
推荐技能:研究生水平的时间序列分析知识很有帮助。
预期输出:贡献者预计将生成代码、文档、可视化和真实数据示例。
参考文献:请联系项目导师获取参考文献。
克利福德电路是一类可以在经典计算机上高效模拟的量子电路。因此,它们不会提供通用量子计算机所期望的计算优势。尽管如此,它们仍然极其重要,因为它们是大多数量子纠错和量子网络技术的基石。能够在数千甚至更多量子比特规模上高效模拟此类电路的软件对于量子硬件的设计至关重要。QuantumClifford.jl Julia 项目支持此类模拟。
克利福德电路的模拟涉及大量使用布尔矩阵的线性代数运算。只要这些加速器支持按位运算,就可以使用许多标准计算加速器(如 GPU)。主要复杂之处在于所考虑的矩阵的元素通常被打包以提高性能并降低内存使用量,例如,64 个元素的向量将存储为单个 64 位整数,而不是作为 64 个布尔值的数组。一个代码夏令营项目可以包括在 GPU 内核中实现上述线性代数运算,然后将其无缝集成到 QuantumClifford 库的其余部分中。至少将包括 泡利-泡利积 和某些 小型克利福德算符,但可以扩展到一般的 稳定器表格乘法,甚至 表格对角化。其中一些功能已经实现,但需要进行大量的改进和进一步改进以及实现缺失的功能。
推荐技能:模拟克利福德电路使用的 稳定器形式 的基本知识。熟悉 Julia 中的性能分析工具和 Julia 的 GPU 堆栈,包括 KernelAbstractions 和 Tullio。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预期持续时间:175 小时(但申请者可以通过包括规范化例程中使用的 GPU 加速高斯消元法的工作来将其范围扩大到更长的项目)
难度:如果申请者熟悉 Julia,即使不了解量子信息科学,难度也为中等(但申请者可以通过包含上述其他主题来将其范围扩大到“困难”)
量子纠错码通常以类似于经典码的奇偶校验矩阵的形式表示。这种形式被称为稳定器表格(Stabilizer tableaux)。本项目将涉及创建常用量子纠错码的综合库和/或实现这些码的综合征解码算法。该库已经包含了一些简单的代码和一些解码器的接口——添加另一个小型代码或提供一个小型的文档拉取请求可能是申请此项目时证明能力的好方法。如果包含解码器的工作,该项目可以扩展到更长的时间。该项目很大一部分将涉及文献调研。一些建议包含的代码:颜色码、高维拓扑码、超图积码、代码中的扭曲、较新的LDPC码、蜂窝码、Floquet码。一些建议研究的解码器:迭代解码、小集翻转解码、有序统计解码、置信传播、神经置信传播。
推荐技能:了解用于模拟Clifford电路的稳定器形式。熟悉python的ldpc
、pymatching
和stim
等工具会有所帮助。也可以考虑查看PyQDecoders.jl
Julia包装器包。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但申请者可以根据计划实现的功能列表将其范围延长)
难度:中等。具备一些量子纠错基础知识即可轻松上手
将一个n量子比特的Clifford门作用于一个n量子比特的状态(表格)的操作类似于矩阵乘法,需要O(n^3)步。但是,将单个量子比特或两个量子比特的门作用于n量子比特表格的速度要快得多,因为它只需要处理表格的一列或两列。本项目将专注于扩展symbolic_cliffords.jl中已启动的左乘特殊情况,并创建额外的右乘特殊情况(Stim库是一个很好的参考)。
推荐技能:了解用于模拟Clifford电路的稳定器形式。熟悉Julia中的性能分析工具。如果您计划使用Stim库作为参考,则需要了解C/C++。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但如果申请者计划进行其他重要的优化和API设计工作,可以将其范围延长)
难度:简单
QuantumClifford库已经有一些生成与纠错相关的不同类型电路的支持(主要是在肖尔算法等综合征测量电路方面),以及评估纠错码和解码器的质量。可以通过实现更现代的编译方案来进行显著改进,特别是依赖于标志量子比特的方案。
推荐技能:了解各种标志量子比特方法。一些有用的参考可以是a、b、c以及这个视频讲座。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:困难
MBQC量子计算模型与稳定器态的研究有很多重叠之处。本项目将围绕在Julia中创建MBQC编译器和潜在的模拟器。例如,如果给定一个任意的图态和一个电路,如何在MBQC模型中编译该电路。
推荐技能:了解MBQC量子计算模型。这篇论文及其相关的python库可以作为有用的参考。还可以参考这篇参考文献。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:困难
图态形式主义是一种更有效地处理具有稀疏表格的稳定器态的方法。本项目将涉及创建必要的门模拟算法以及图形式主义和稳定器形式主义之间的转换工具(其中一些已经在库中提供)。
推荐技能:了解图形式主义。这篇论文可以作为有用的参考。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:中等
有各种技术用于增强Clifford电路模拟器以模拟仅“大部分”是Clifford的电路。特别是Clifford+T门模拟器很著名。本项目是关于实现此类扩展。
推荐技能:深入理解稳定器形式主义,并理解该方法的一些扩展。我们有一些初始实现。这篇IBM论文也可以作为其他方法的有用参考。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:困难
魔态是重要的非稳定器态,可用于在其他情况下为Clifford电路引入非Clifford门。它们对于创建纠错的通用电路至关重要。本项目将涉及为分析此类状态以及评估涉及此类状态的蒸馏电路和ECC电路贡献工具。
推荐技能:深入理解魔态理论及其在容错中的应用。
导师:斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:困难
表示和建模量子态最常见的方法是态矢量形式主义(是薛定谔方程和海森堡方程以及许多其他主方程的基础)。QuantumOptics.jl Julia项目支持此类模拟,利用了Julia中独特的强大的DiffEq基础设施。
QuantumOptics.jl中量子态的大部分内部表示依赖于标准密集数组。由于Julia的多重派发特性,这些对象中的大部分已经可以很好地与GPU数组一起工作。本项目将涉及彻底调查和验证当前的接口,以确保它们可以很好地与GPU数组一起工作。特别是,必须注意“延迟”运算符,因为可能需要为它们实现特殊的内核。
推荐技能:熟悉Julia中的性能分析工具和Julia的GPU堆栈,可能包括KernelAbstractions。
导师:Stefan Krastanov <stefan@krastanov.org>和QuantumOptics.jl团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:中等
自动微分是自动生成有效代码以评估给定Julia函数的数值导数的能力。与上面的GPU案例类似,此功能的大部分已经“神奇地”起作用,但没有详细的测试套件,也没有进行验证。本项目将涉及实现、验证和测试在QuantumOptics.jl中使用Julia自动微分工具。ForwardDiff、Enzyme、Zygote、Diffractor和AbstractDifferentiation都是应该具有一定程度的验证和支持的工具,包括在ODE求解和简单的算符应用中。
推荐技能:熟悉Julia自动微分堆栈和SciML灵敏度分析工具。熟悉自动微分复数的困难(一般来说,尤其是在Julia中)。了解AbstractDifferentiation.jl包。
导师:Stefan Krastanov <stefan@krastanov.org>和QuantumOptics.jl团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:简单到中等
SciML是Julia生态系统中大部分基础数值软件开发的总括组织。我们已经使用了它们的许多功能,但更紧密地匹配它们期望的接口将是有益的。这个项目将主要侧重于软件**工程**方面。我们想要支持的形式和非正式接口包括:更好地支持DiffEq问题类型(目前我们用我们自己的基础设施包装DiffEq问题,很难在SciML中重复使用它们);更好地支持状态对象上的广播操作(以便我们可以将它们更接近于普通数组,并且我们可以简单地向DiffEq求解器提供初始状态,而无需包装/解包数据);更多地依赖于SciMLOperators,它们与我们的延迟运算符有很大的重叠。
推荐技能:熟悉SciML堆栈。
导师:Stefan Krastanov <stefan@krastanov.org>和QuantumOptics.jl团队成员
预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)
难度:简单
为张量表达式实现D*算法。
推荐技能:高中/大学一年级微积分和基础图论(可选)
预期成果:一个能够对张量表达式执行高效微分的D*算法的工作实现。
导师:Yingbo Ma
时长:350 小时
Symbolics.jl有强大的方法可以将符号表达式转换为多元多项式。现在在(Groebner.jl)中有一个强大的格伦纳基实现。找到多项式集的根和簇在许多应用中都非常有用。本项目将涉及实现各种求解多项式系统的方法,并在可能的情况下实现其他非线性方程组。一个好的提议应该尝试枚举一些值得实现的技术,例如
度数≤4的多项式系统的解析解
使用HomotopyContinuations.jl测试可解性和查找数值解
牛顿-拉夫森方法
使用格伦纳基计算查找簇
这些功能的API应该非常用户友好
单个roots
函数应该接收方程组并以正确的根类型作为输出(簇或数值答案)
它应该自动找到求解方程组的最快策略并应用它。
当方程不可解或以某种方式退化时,它应该以描述性错误消息失败。
这将允许在调用eigs
时实现符号特征值计算。
导师:Shashi Gowda,Alexander Demin 时长:350小时
实现符号积分的启发式方法。然后连接到规则库,例如RUMI。另请参阅使用符号数值积分技术的潜力(https://github.com/SciML/SymbolicNumericIntegration.jl)
推荐技能:高中/大学一年级微积分
预期成果:Symbolics.jl库中符号积分的工作实现,以及演示其在科学学科中使用的文档和教程。
时长:350 小时
使用Symbolics.jl变量可以跟踪接收数组并输出数组或标量的Julia函数以生成操作跟踪。此输出可以优化为使用融合操作或调用高度特定的NNLib函数。在本项目中,您将跟踪Flux.jl神经网络函数并对生成的符号表达式应用优化。这可以主要实现为基于规则的重写规则(参见https://github.com/JuliaSymbolics/Symbolics.jl/pull/514)。
推荐技能:了解数组操作的空间和时间复杂度,优化数组代码的经验。
导师:Shashi Gowda
时长:175小时
Herbie记录了一种优化浮点函数的方法,以减少指令计数,同时重新组织操作,以防止浮点误差被放大。将其用Julia编写并在Symbolics.jl表达式上运行将是一个很好的补充。理想的实现将使用Metatheory.jl的e-graph设施来实现这一点。
导师:Shashi Gowda,Alessandro Cheli
时长:350 小时
难度:中等
时长:175小时
Apache Parquet 是一种用于表格数据的二进制数据格式。它具有用于压缩和内存映射磁盘上数据集的功能。在 Julia 中实现一个不错的 Parquet 版本可能会具有很高的性能。它将作为以二进制格式分发表格数据的标准格式很有用。存在一个 Parquet.jl 包,其中包含 Parquet 读取器和写入器。它目前在非常基本的层面上符合 Julia 表格文件 IO 接口。它需要更多工作来添加对关键元素的支持,这些元素将使 Parquet.jl 可用于快速的大规模并行数据处理。每个目标都可以作为一个单独的、短期(175 小时)项目来进行。
延迟加载和对核心外处理的支持,以及与 Arrow.jl 和 Tables.jl 的集成。改进大型文件 Parquet 读取器和写入器的可用性和性能。
从云数据存储读取和写入数据,包括对分区数据的支持。
支持缺失数据类型和编码,使 Julia 实现功能齐全。
资源
The Parquet 文件格式(互联网上还有许多关于 Parquet 存储格式的文章和演讲)
推荐技能:精通 Julia 语言、Julia 数据栈以及编写高性能 Julia 代码。
预期成果:取决于我们最终商定的具体项目。
难度:困难
时长:175小时
DataFrames.jl 是 Julia 中更流行的表格数据类型实现之一。它支持的功能之一是数据帧连接。但是,需要做更多工作来改进此功能。该项目的具体目标是(项目范围内的最终目标列表可以在稍后确定)。
通过连接完全实现多线程支持,减少使用的连接算法的内存需求(这应该还可以提高它们的性能),验证替代连接策略与当前使用的策略相比的效率,并实现它们以及根据传递的数据选择正确连接策略的自适应算法;
实现允许对非等值键进行高效匹配的连接;应特别注意对作为日期/时间和空间对象的键进行匹配;
实现允许根据匹配键和指定何时应执行更新的条件,通过另一个数据帧中存储的值就地更新一个数据帧的列的连接;
实现比当前可用的更灵活的机制,允许在执行连接时定义输出数据帧列名。
资源
推荐技能:精通 Julia 语言、Julia 数据栈以及编写高性能多线程 Julia 代码。具备代码基准测试和编写测试的经验。了解连接算法(例如,在 DuckDB 等数据库或其他表格数据处理生态系统(如 Polars 或 data.table)中使用的算法)。
预期成果:取决于我们最终商定的具体项目。
Taija 是一个组织,它托管面向 Julia 中值得信赖的人工智能的软件。Taija 目前涵盖了一系列使 AI 系统更值得信赖的方法
模型可解释性(CounterfactualExplanations.jl)
算法追溯(CounterfactualExplanations.jl,AlgorithmicRecourseDynamics.jl)
预测不确定性量化(ConformalPrediction.jl,LaplaceRedux.jl)
轻松贝叶斯深度学习(LaplaceRedux.jl)
混合学习(JointEnergyModels.jl)
可以使用各种元包来扩展核心功能
绘图(TaijaPlotting.jl)
用于测试和基准测试的数据集(TaijaData.jl)
与其他编程语言的互操作性(TaijaInteroperability.jl)
与以下组织有高度重叠,你可能也感兴趣
使用MLJ.jl的项目 - 适用于更传统的机器学习项目
FluxML 项目 - 针对 Flux.jl 的项目,Flux.jl 是 Julia 深度学习生态系统的核心
项目概述:ConformalPrediction.jl 是一个用于通过 MLJ 中训练的机器学习模型的保形预测进行预测不确定性量化的包。该项目旨在通过添加对 保形(化)贝叶斯 的支持来增强 ConformalPrediction.jl。
导师:Patrick Altmeyer 和/或 Mojtaba Farmanbar
项目难度:中等
预计时长:175 小时
理想候选人画像
Julia 的基础知识或类似编程语言(R、Python、MATLAB 等)的扎实知识
对贝叶斯方法有很好的理解
保形预测的基础知识
项目目标和交付成果
项目概述:CounterfactualExplanations.jl 是一个用于 Julia 中反事实解释和算法追溯的包。该项目旨在将包的功能扩展到 回归模型。
项目难度:困难
预计时长:350 小时
理想候选人画像
有使用 Julia 和多重调度的经验,但不是关键
良好的机器学习和统计学知识
对监督模型(分类和回归)有扎实的理解
项目目标和交付成果
项目概述:该项目旨在扩展 CounterfactualExplanations.jl 的功能,使其支持大型语言模型(LLM)。作为其基础,还需要实现对 LLM 特征归因的计算支持。该项目将同时为 Taija 和 JuliaGenAI 做出贡献。
导师:Patrick Altmeyer(Taija)和 Jan Siml(JuliaGenAI)
项目难度:中等
预计时长:175 小时
理想候选人画像
有使用 Julia 和多重调度的经验,但不是关键
良好的机器学习和统计学知识
良好的大型语言模型 (LLM) 理解
理想情况下,之前有使用 Transformers.jl 的经验
项目目标和交付成果
仔细考虑架构选择:我们如何将对 LLM 的支持融入 CounterfactualExplanations.jl 的现有代码库中?
全面测试和记录您的工作
项目概述:此扩展旨在通过合并一个模块来生成通过最小的因果干预措施实现的可操作追溯来增强 CounterfactualExplanations.jl 包。
导师:Patrick Altmeyer(Taija)和 Moritz Schauer(CausalInference.jl)
项目难度:困难
预计时长:350 小时
理想候选人画像
Julia 经验
因果关系背景以及对反事实推理的熟悉。
最小干预措施和因果图构建的基础知识。
项目目标和交付成果
仔细考虑架构选择:我们如何将对因果干预的支持融入现有代码库?
开发可以将因果图构建与其他 Julia 库(如 Graphs.jl、GraphPlot.jl 和 CausalInference.jl)集成的代码。
实现使用结构化因果模型 (SCM) 的最新最先进的最小干预方法。
全面测试和记录您的工作。
Patrick Altmeyer 是代尔夫特理工大学值得信赖的人工智能博士候选人,致力于计算机科学与金融的交叉领域。他在 JuliaCon 2022 年和 2023 年发表了与 Taija 相关的作品。在过去的一年里,Patrick 指导了代尔夫特理工大学的多个学生小组,他们对 Taija 做出了重大贡献。
我们很乐意听取您的想法并与您讨论潜在的项目。
可能最简单的方法是加入我们的 JuliaLang Slack 并加入 #taija
频道。您也可以在我们的组织 repo 上发布 GitHub 问题。
TopOpt.jl 是一个用纯 Julia 编写的 拓扑优化 包。拓扑优化是形状表示、物理模拟和数学优化交叉口的一个令人兴奋的领域,而 Julia 语言非常适合这个领域。要了解有关 TopOpt.jl
的更多信息,请查看以下 JuliaCon 演讲。
以下是您在即将到来的 Julia 贡献季或 Google 暑期代码项目中可以参与的拓扑优化项目的初步列表。如果您有兴趣探索任何这些主题,或者您对拓扑优化有其他兴趣,请通过电子邮件联系主要导师 Mohamed Tarek。
项目难度:中等
工作量:350 小时
描述:该项目的目的是通过测试其实现与其他软件的输出结果来提高 TopOpt.jl 的单元测试覆盖率和可靠性。测试和基准测试应力及屈曲约束及其导数将是该项目的主要重点。可能需要将论文中的 Matlab 脚本翻译成 Julia 以进行正确性和性能比较。
知识先决条件:结构力学、优化、Julia 编程
项目难度:中等
工作量:350 小时
描述:在拓扑优化中,有很多方法可以使用机器学习进行设计优化。以下是所有最近使用神经网络和机器学习进行拓扑优化的论文。在这个方向上也存在令人兴奋的研究机会。
在这个项目中,您将实现这些论文中讨论的算法之一。
知识先决条件:神经网络、优化、Julia 编程
项目难度:中等
工作量:350 小时
描述:目前在 TopOpt.jl 中,只支持非结构化网格。这是一种非常灵活的网格类型,但它不像所有单元格都假设具有相同形状的均匀直线网格那样内存高效。这是实践中拓扑优化中最常用的网格。目前在 TopOpt.jl 中,均匀直线网格将存储为非结构化网格,这毫无必要地效率低下。在这个项目中,您将针对均匀直线网格优化 TopOpt.jl 中的有限元分析和拓扑优化代码。
知识先决条件:网格类型的知识、Julia 编程
项目难度:中等
工作量:350 小时
描述:具有更多网格单元的拓扑优化问题需要更长的时间来模拟和优化。在这个项目中,您将探索自适应网格细化(从粗网格开始)的使用,优化并仅细化需要进一步优化的单元格。这是一种加速拓扑优化算法的有效方法。
知识先决条件:自适应网格细化、Julia 编程
项目难度:中等
工作量:175 或 350 小时
描述:TopOpt.jl 中的所有示例和问题类型目前都属于线性弹性、准静态问题类别。该项目的目的是从传热领域实现更多问题类型和示例。稳态传热问题和线性弹性问题都利用椭圆偏微分方程,因此线性弹性问题的代码应该可以在最小的更改下大量重复用于传热问题。
知识先决条件:有限元分析、热传导方程、Julia编程
Trixi.jl 是一个用于守恒律自适应高阶数值模拟的Julia包。它旨在易于学生和研究人员使用,可扩展用于研究和教学,以及高效且适用于高性能计算。
难度:中等(取决于所选子任务,最高可达困难)
项目规模:175小时或350小时,取决于所选子任务
Enzyme.jl 是Enzyme的前端,Enzyme是一个现代自动微分(AD)框架,在LLVM代码级别工作。它可以提供快速的前向和反向模式AD,并且与一些其他AD包不同,它支持变异操作。由于Trixi.jl依赖于变异操作和缓存以提高性能,因此此功能对于获得对模拟运行和AD都高效的实现至关重要。
该项目的总体目标是使用Enzyme.jl进行AD,创建一个Trixi.jl(或其子集)的工作原型,并尽可能支持Trixi的许多高级功能,例如自适应网格细化、激波捕捉等。
该项目中可能包含的子任务包括
通过Enzyme.jl探索和实现一维对流方程或一维可压缩欧拉方程的简化模拟的前向/反向模式AD(例如,计算简单网格上串行执行中右侧评估Trixi.rhs!
的雅可比矩阵)
通过Enzyme.jl探索和实现Trixi.jl提供的半离散化的前向模式AD,模仿通过ForwardDiff.jl已有的功能
探索和实现通过Enzyme.jl进行的完整模拟的AD,将Trixi.jl的半离散化与OrdinaryDiffEq.jl的时间积分方法相结合
与该项目相关的子任务,这些子任务与Enzyme.jl没有直接关系,但使用了其他包,包括
探索和实现改进当前缓存处理的方法,以简化使用Trixi.jl的半离散化进行AD和可微编程,例如,通过PreallocationTools.jl。
将基于ForwardDiff.jl的当前AD支持扩展到Trixi.jl的其他功能,例如,激波捕捉离散化、MPI并行模拟以及其他当前不支持的功能
该项目非常适合对数值分析和科学机器学习领域感兴趣的软件工程师,以及对在该领域进行研究生研究感兴趣的学生。
推荐技能:至少熟悉一种数值离散化方案(例如,有限体积、间断伽辽金、有限差分);自动微分的初步知识;最好具备(或渴望学习)编写快速代码的能力
预期结果:对Trixi.jl的最先进和生产级自动微分工具的贡献
导师:Hendrik Ranocha,Michael Schlottke-Lakemper
难度:中等
项目规模:175小时或350小时,取决于所选子任务
可视化和记录结果是科学过程中的一个重要部分。在Trixi.jl中,我们依靠纯Julia包(例如Plots.jl和Makie.jl)和开源科学可视化套件ParaView的组合进行可视化。虽然Julia解决方案非常适合可视化一维和二维数据,但ParaView是创建三维数据出版质量图形的首选。
目前,只有在模拟完成后才能使用ParaView进行可视化,并且需要额外的后处理步骤,其中Trixi.jl的原生输出文件使用Trixi2Vtk.jl转换为VTK文件。此额外步骤使其使用起来有些不方便,尤其是在需要在长时间的多小时模拟运行期间检查数值解的当前状态时。
因此,该项目的目的是通过引入两项重大改进使此类可视化更容易
添加在模拟过程中直接写入原生VTKHDF文件的功能,包括串行和并行。
启用结果的并行原位可视化,即通过使用Catalyst API将ParaView连接到当前正在运行的并行Trixi.jl模拟来可视化结果。
这两项任务都与需要学生熟悉Trixi.jl内部使用的数据格式以及VTK/ParaView的可视化管道相关。但是,它们可以独立执行,因此该项目适合175小时或350小时的投入,具体取决于要解决的任务是其中一项还是两项。
该项目非常适合对可视化和科学数据分析领域感兴趣的软件工程师,以及对在数值分析和高性能计算领域进行研究生研究感兴趣的学生。
推荐技能:至少了解一种数值离散化方案(例如,有限体积、间断伽辽金、有限差分)会有所帮助;可视化或并行处理的初步知识;最好具备(或渴望学习)编写快速代码的能力。
预期结果:Trixi.jl的可扩展、生产质量的科学结果可视化。
导师:Michael Schlottke-Lakemper,Benedict Geihe,Johannes Markert
图灵 是一种嵌入在Julia中的通用概率编程语言。图灵允许用户使用标准Julia语法编写模型,并提供广泛的基于采样的推理方法来解决概率机器学习、贝叶斯统计和数据科学等领域的问题。由于图灵是用纯Julia代码实现的,因此其编译器和推理方法易于修改:可以轻松添加新的模型族和推理方法。
以下是潜在项目的创意列表,但欢迎您向图灵团队提出自己的创意。如果您有兴趣探索任何这些项目,请联系列出的项目导师或孙显达(xs307[at]cam.ac.uk)。您可以在此处找到他们的联系信息。
导师:Seth Axen,Tor Fjelde,Kai Xu,Hong Ge
项目难度:中等
项目时长:175小时或350小时
描述:posteriordb 是一个包含120个不同贝叶斯模型的数据库,这些模型在Stan中实现(在PyMC中有一个示例模型),并带有参考后验抽样、数据和元数据。为了进行性能比较并展示图灵中的最佳实践,拥有这些模型的图灵实现非常有用。该项目的目的是在图灵/Julia中实现这些模型的大部分子集。
对于每个模型,我们考虑以下任务:正确性测试:当参考后验抽样和采样器配置在posteriordb中可用时,可以通过使用相同的配置对模型进行采样并将样本与参考抽样进行比较来测试实现的正确性和一致性。最佳实践:必须检查所有模型是否与所有图灵支持的AD框架都可微。
导师:Tor Fjelde,Jaime Ruiz Zapatero,Cameron Pfiffer,David Widmann
项目难度:简单
项目时长:175小时
描述:Turing.jl中的大多数采样器都实现了AbstractMCMC.jl接口,允许用户以统一的方式与采样器交互。AbstractMCMC.jl的接口目前非常基础,不利于采样器之间的互操作性。
例如,组合两个MCMC内核是完全有效的,例如,使用AdvancedMH.jl中的RWMH执行一步,然后使用AdvancedHMC.jl中的NUTS执行一步。不幸的是,实现这种组合需要明确定义RWMH返回的状态和NUTS返回的状态之间的转换,以及NUTS的状态到RWMH的状态的转换。对于一对这样的采样器,执行此操作通常非常容易,但是当您需要对N个采样器执行此操作时,需要完成的工作量突然变得无法克服。
处理此问题的一种方法是添加一个简单的接口来与采样器的状态交互,例如,获取状态中当前值的方法,设置状态中当前值的方法,以及一组胶水方法,这些方法可以在特定情况下被重写,在这些情况下,可以在状态之间共享更多信息。
作为尝试朝着这个方向迈出一大步的一些正在进行的工作的示例:https://github.com/TuringLang/AbstractMCMC.jl/pull/86
导师:Tor Fjelde,Tim Hargreaves,孙显达,Kai Xu,Hong Ge
项目难度:困难
项目时长:175小时或350小时
描述:Bijectors.jl是一个促进图灵.jl内分布转换的包,目前缺乏完整的GPU兼容性。这种限制部分源于某些双射的实现细节,也源于Distributions.jl包中某些分布的实现方式。NormalizingFlows.jl是Turing.jl生态系统中一个较新的补充,构建在Bijectors.jl之上,为训练归一化流提供了用户友好的界面和实用程序函数,但共享相同的GPU兼容性问题。
该项目的目的是增强Bijectors.jl和NormalizingFlows.jl的GPU支持。
导师:Tor Fjelde,孙显达,David Widmann,Hong Ge
项目难度:中等
项目时长:350 小时
描述:该项目旨在为Bijectors.jl和NormalizingFlows.jl(构建在Bijectors.jl之上)引入批处理模式
。
简单地说,我们希望用户能够通过将参数“堆叠”到更高维度的数组中来同时向模型提供多个输入。
实现可以采用多种形式,作为一个关心性能和用户体验的开发人员团队,我们对不同的方法和讨论持开放态度。一种可能的方法是开发一种机制,该机制向代码发出信号,指示代码将给定的输入作为批处理而不是作为单个条目进行处理。初步实现可以在此处找到。
导师:Kai Xu,Hong Ge
项目难度:中等
项目时长:175小时
描述:该项目旨在开发一个综合的目标分布集合,旨在研究和评估各种计算环境中的马尔可夫链蒙特卡罗(MCMC)采样器。该集合将是对现有Julia包VecTargets.jl的扩展和增强,该包目前仅提供有限的向量化、GPU加速和高阶导数支持。该项目的主要目标包括
确保目标分布完全支持向量化和GPU加速
使高阶导数(最高三阶)能够与目标分布无缝集成
创建清晰而全面的文档,概述项目的功
研究和记录如何在 Julia 中可用的不同自动微分 (AD) 包之间进行组合或利用,以实现高效且准确的高阶导数计算。
通过实现这些目标,该项目旨在提供一个强大的框架,可以显著促进更高效和更强大的 MCMC 采样器的研究和开发,从而推动计算统计和机器学习领域的发展。
我们通常在寻找想要帮助开发 Julia VS Code 扩展 的人员。我们有许多未解决的问题,其中一些问题相当于重大的项目。
所需技能:TypeScript、Julia、Web 开发。
预期成果:取决于我们商定的具体项目。
Julia 的 VSCode 扩展可以提供一种简单的方法来浏览可用的包并查看用户系统上安装了哪些包。首先,此项目可以简单地提供一个 GUI,从 Project.toml
/Manifest.toml
读取包数据,并显示一些 UI 元素来添加/删除/管理这些包。
这也可以通过包含有关包的元数据来扩展,例如自述文件、GitHub 星星、活动等(有点类似于 VSCode 原生扩展浏览器)。
预期成果:VSCode 中用于包操作的 UI。
推荐技能:熟悉 TypeScript 和 Julia 开发。
还可以查看 Pluto - VS Code 集成!
Julia 对目标 WebAssembly 和在 Web 浏览器中运行提供了早期支持。请注意,这是一个快速发展的领域(请参阅 项目存储库 以获取更详细的概述),因此,如果您对这项工作感兴趣,请务必了解当前状态并与我们联系以确定合适的项目。以下是作为一组可能的起点。
除非另有说明,否则这些项目的导师为 Keno Fischer。
由于 Julia 依赖于异步任务运行时,而 WebAssembly 目前缺乏对栈管理的原生支持,因此 Julia 需要在 wasm 堆中显式管理任务栈,并执行编译器转换以使用此栈而不是本机 WebAssembly 栈。此转换的开销直接影响 Julia 在 wasm 平台上的性能。此外,由于 Julia 使用的所有代码(包括任意 C/C++ 库)都必须使用此转换进行编译,因此它需要涵盖各种输入,并与具有类似需求的其他用户协调(例如,在 Web 上运行 python 的 Pyodide 项目)。该项目旨在提高此转换的质量、稳健性和灵活性。
推荐技能:LLVM 经验。
WebAssembly 正在标准化 线程。同时,Julia 中正在进行引入新的线程运行时的工作(请参阅 #22631 和相关的 PR)。此项目将研究为 WebAssembly 平台上的 Julia 启用线程支持,在 WebAssembly 平台上实现运行时并行原语,并确保高级线程构造正确映射到底层平台。请注意,WebAssembly 和 Julia 线程基础设施仍处于积极开发中,并且在项目持续期间可能会继续发生变化。对这些项目状态的了解是该项目的明确先决条件。
推荐技能:C 和多线程编程经验。
WebAssembly 正在添加 对原生对象的引用 到其规范中。此功能应允许 Julia 和 JavaScript 对象之间实现非常高性能的集成。由于无法在常规内存中存储对 JavaScript 对象的引用,因此添加此功能需要对运行时系统和代码生成进行一些更改(可能包括在 LLVM 层面),以便正确跟踪这些引用并将其作为对引用表的直接引用或间接引用发出。
推荐技能:C 经验。
虽然 Julia 现在可以在 Web 平台上运行,但它还不是一种适合 Web 应用程序一流开发的语言。最大的缺失功能之一是与更复杂的 JavaScript 对象和 API(特别是 DOM)的集成和抽象。可以从 Rust 或其他语言中的类似项目中汲取灵感。
推荐技能:在 Julia 中编写库的经验,JavaScript Web API 经验。
一些 Julia 库(例如 WebIO.jl、Escher.jl)为 Web 平台提供了输入和输出功能。将这些库移植到 wasm 平台上直接运行将使许多现有的 UI 能够自动在 Web 上工作。
推荐技能:在 Julia 中编写库的经验。
Julia 项目使用 BinaryBuilder 提供 Julia 包的原生依赖项的二进制文件。存在扩展此支持到 wasm 平台的实验性支持,但很少有包被移植。此项目将包括尝试通过改进 BinaryBuilder 中的工具链支持或(如果必要)移植上游包来修复 wasm 平台上不适用的假设,从而将 Julia 生态系统的大部分二进制依赖项移植到 Web 平台。
推荐技能:在 Unix 环境中构建原生库的经验。
Julia 中的分布式计算抽象为实现跨不同机器上的许多通信 Julia 进程的程序提供了便捷的抽象。但是,现有的抽象通常假设所有通信进程都是同一信任域的一部分(例如,它们允许消息在远程执行任意代码)。由于某些节点可能在 Web 浏览器中运行(或多个浏览器节点通过 WebRPC 成为同一分布式计算集群的一部分),因此此假设不再成立,需要设计新的接口来支持多个信任域,而不会过度限制可用性。
推荐技能:分布式计算和在 Julia 中编写库的经验。
目前 Web 平台上 Julia 的支持用例主要针对提供交互式环境以支持对完整语言的探索。当然,这会导致比将 Julia 用作生产部署的一部分所需的二进制文件大得多。通过禁用动态语言功能(例如 eval),可以生成适合部署的小型二进制文件。在 PackageCompiler.jl 等包中已经取得了一些进展,但仍有大量工作要做。
推荐技能:对 Julia 内部工作原理感兴趣或有经验。