查看所有 GSoC/JSoC 项目

此页面旨在提高项目的可发现性。例如,您可以在此页面上搜索特定关键字并找到所有相关的项目。

项目

MLJ.jl 项目 – 暑期代码

MLJ 是一个用于 Julia 的机器学习框架,旨在提供一种便捷的方式来使用和组合 Julia ML/Stats 生态系统中提供的众多工具和模型。

项目列表

MLJ 在 MIT 许可下发布,并由艾伦·图灵研究所赞助。

  1. 查看所有 GSoC/JSoC 项目
  2. 项目
    1. 项目列表
  3. 分类变量编码
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  4. 预测生存分析中的机器学习
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  5. 更深入的贝叶斯集成
    1. 描述
    2. 您的贡献
    3. 参考文献
    4. 难度:中等至困难
  6. 使用 MLflow 跟踪和共享 MLJ 工作流
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  7. 只有速度狂人才能申请
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  8. 提高测试覆盖率 (175 小时)
  9. 多线程改进项目(每个 175 小时)
  10. 测试/性能基准测试自动化 (350 小时)
  11. Documenter.jl
  12. 流固耦合示例
  13. 高性能组装策略的研究
    1. 在非常大的图上进行训练
    2. 添加图卷积层
    3. 添加模型和示例
    4. 添加图数据集
    5. 实现异构图的层
    6. 使用稀疏线性代数提高性能
    7. 支持 AMGDPU 和 Apple Silicon
    8. 实现时间图的层
  14. 推荐技能
  15. 导师
  16. QML 和 Makie 集成
    1. 预期结果
  17. Makie 和 JSServe 中的 Web 应用程序
    1. 预期结果
  18. Dagger 的调度算法
  19. 分布式训练
  20. Dagger 上的分布式数组
  21. 与其他框架进行基准测试
  22. 讨论和寻找导师的地方
  23. C++
    1. CxxWrap STL
      1. 预期成果
  24. Rust
    1. JuliaConstraints 的总体目标
  25. 基于约束编程的 Kumi Kumi Slope 设计
    1. 核心目标
  26. Agents.jl
  27. DynamicalSystems.jl
  28. 大型语言模型项目
    1. 项目 1:增强 llama2.jl 的 GPU 支持
    2. 项目 2:Llama.jl - 低级 C 接口
    3. 项目 3:增强 AIHelpMe.jl 的知识库
    4. 项目 4:使用 ColBERT v2 增强 Julia 的 AI 生态系统,以实现高效的文档检索
    5. 项目 5:使用高级模式支持和功能增强 PromptingTools.jl
    6. 项目 6:扩展 Julia 大型语言模型排行榜
    7. 项目 7:LLM 的反事实(模型可解释性生成式 AI
  29. 如何联系我们
  30. 观察性健康子生态系统项目
    1. 项目 1:在 Julia 中开发用于观察性健康研究的工具
    2. 项目 2:在 Julia 中开发患者级预测工具
  31. 医学影像子生态系统项目
    1. 项目 3:添加医学影像可视化的功能
    2. 项目 4:添加数据集范围的功能和增强功能的集成
    3. 项目 5:具有多供应商 GPU 支持的高效 MRI 模拟
  32. 从波形文件生成音乐的 MIDI 化
  33. 高效的符号数值集计算
  34. 使用稀疏多项式zonotopes的可达性
  35. 改进混合系统可达性 API
  36. 面板数据分析
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  37. Distributions.jl 扩展
    1. 先决条件
    2. 您的贡献
  38. HypothesisTesting.jl 扩展
    1. 先决条件
    2. 您的贡献
    3. 参考文献
  39. CRRao.jl
    1. 描述
    2. 先决条件
    3. 您的贡献
  40. JuliaStats 改进
    1. 描述
    2. 先决条件
    3. 您的贡献
  41. Survey.jl
    1. 先决条件
    2. 您的贡献
    3. 参考文献
  42. 平滑非线性连续时间系统
    1. 强化学习环境
      1. 预期成果
    2. AlphaZero.jl
      1. 预期成果
  43. 数值线性代数
    1. 矩阵函数
  44. 更好的 Bignums 集成
    1. 特殊函数
    2. 一种 Julia 原生的 CCSA 优化算法
  45. 大规模并行分解弹跳粒子采样器
  46. 机器学习时间序列回归
  47. 用于临近预报和预报的机器学习
  48. 规模化的时间序列预测
  49. 克利福德电路的 GPU 加速模拟器。
  50. 量子纠错码和/或解码器的动物园。
  51. 使用小型门的左右乘法。
  52. 容错 ECC 电路、标志量子位电路等的生成
  53. 基于测量的量子计算 (MBQC) 编译器
  54. 实现图状态模拟器
  55. 轻微非克利福德电路和状态的模拟
  56. 魔态建模 - 蒸馏、注入等
  57. GPU 加速算子和 ODE 求解器
  58. 自动微分
  59. 与 SciML 生态系统更紧密地集成
  60. 高效的张量微分
  61. 符号求根
  62. Symbolics.jl 中的符号积分
  63. 来自符号跟踪的 XLA 风格优化
  64. 自动提高浮点精度(Herbie)
  65. Parquet.jl 增强功能
  66. DataFrames.jl 连接增强功能
  67. 项目 1:共形预测遇见贝叶斯(预测不确定性
  68. 项目 2:反事实回归(模型可解释性
  69. 项目 3:LLM 的反事实(模型可解释性生成式 AI
  70. 项目 4:从反事实到干预(通过最小因果干预进行追溯)
  71. 关于我们
  72. 如何联系我们
  73. TopOpt.jl 的测试和基准测试
  74. 拓扑优化中的机器学习
  75. 在均匀矩形网格上的优化
  76. 拓扑优化的自适应网格细化
  77. 传热设计优化
  78. 基于编译器的自动微分与 Enzyme.jl
  79. 使用 ParaView 进行高级可视化和原位可视化
  80. 在 Turing/Julia 中实现来自 PosteriorDB 的模型
  81. 改进 Turing 和 Turing 的 MCMC 推理包之间的集成
  82. NormalizingFlows.jl 和 Bijectors.jl 的 GPU 支持
  83. NormalizingFlows.jl 和 Bijectors.jl 的批量支持
  84. 具有矢量化、GPU 和高阶导数支持的基准测试采样器的目标
  85. VS Code 扩展
  86. 包安装 UI
  87. 代码生成改进和异步 ABI
  88. Wasm 线程
  89. 高性能,js 对象的低级集成
  90. DOM 集成
  91. 将现有的 Web 集成包移植到 wasm 平台
  92. Web 的本机依赖项
  93. 与不受信任方进行分布式计算
  94. 部署

分类变量编码

扩展 MLJ 的分类变量编码。

难度。中等。持续时间。350 小时

描述

MLJ 提供了分类变量的基本独热编码,但没有提供复杂的编码技术。独热编码相当有限,尤其是在分类具有非常多的类别时。存在许多其他技术,并且此项目旨在使其中一些技术可供 MLJ 用户使用。

导师。Anthony Blaom(最佳联系方式:在 Julia Slack 上发送私信)

先决条件

您的贡献

在此项目中,您将调查流行的现有方法,用于对分类变量进行独热编码。与导师合作,您将制定一个将其中一些技术集成到 MLJ 中的计划。您将开始着手实施该计划,最初专注于简单的方法,为现有的 Julia 包提供 MLJ 接口,或在需要时提供新的实现。如果项目进展顺利,您将实施更高级的技术,例如通过 MLJFlux.jl(MLJ 的神经网络接口)实现实体嵌入

参考文献

预测生存分析中的机器学习

实现用于在 MLJ 机器学习平台中使用的生存分析模型。

难度。中等 - 困难。持续时间。350 小时

描述

生存/事件发生时间分析是统计学中的一个重要领域,它关注的是了解事件随时间的分布。生存分析提出了一个独特的挑战,因为我们也对没有发生的事件感兴趣,我们称之为“删失”。生存分析方法在许多现实世界环境中都很重要,例如医疗保健(疾病预后)、金融和经济学(违约风险)、商业企业(客户流失)、工程学(组件寿命)等等。本项目旨在使用 MLJ 机器学习框架实现执行幸存者分析的模型。

mlr3proba 目前是最完整的生存分析接口,让我们让 SurvivalAnalysisA.jl 达到相同的标准 - 但要从一路上的错误中吸取教训。

导师。Sebastian VollmerAnthony Blaom

先决条件

首选的。

您的贡献

您将致力于创建一个具有各种指标的生存分析包,能够对经典模型和 ML 模型进行分布预测。您将在早期加入竞争风险,以及预测转换,并包括左删失和区间删失。您将编写基本模型(Cox PH 和 AFT),以及一个作为概念证明的 ML 模型(可能是决策树最简单或 Coxnet)。

具体来说,您将

MLJ 中的学习模型。

模型。

参考文献

更深入的贝叶斯集成

贝叶斯方法和概率监督学习提供不确定性量化。本项目旨在增加集成以结合贝叶斯和非贝叶斯方法,使用 Turing。

难度。困难。持续时间。350 小时。

描述

作为第一步,在 Turing 中重现SOSSMLJ。该项目的大部分内容是实现结合多个预测分布的方法。

您的贡献

参考文献

贝叶斯堆叠 SKpro

难度:中等至困难

导师: 葛洪 Sebastian Vollmer

使用 MLflow 跟踪和共享 MLJ 工作流

帮助使用 MLJ 的数据科学家使用 MLflow 追踪和分享他们的机器学习实验。该项目此阶段的重点是

难度:中等。时长:350 小时。

描述

MLflow 是一个用于机器学习生命周期的开源平台。它允许数据科学家将实验元数据和输出上传到平台,以实现复制和共享的目的。MLJ 已经允许 用户将基本的模型性能评估报告到 MLflow 服务,而这个项目旨在极大地增强这种集成。

先决条件

您的贡献

参考文献

导师: Anthony Blaom

只有速度狂人才能申请

诊断和利用加快常用 MLJ 工作流的机会。

难度:中等。时长:350 小时。

描述

除了调查一些已知的性能瓶颈之外,您还将拥有自由裁量权来确定加快常用 MLJ 工作流的机会,以及更好地利用内存资源。

先决条件

您的贡献

在这个项目中,您将

参考文献

导师: Anthony Blaom,Okon Samuel。

贝叶斯优化

贝叶斯优化是一种用于(潜在噪声)函数的全局优化策略,这些函数具有未知导数。通过精心选择的先验,它可以比替代方法使用更少的函数评估来找到最优值,使其非常适合优化代价高昂的目标函数。

众所周知的例子包括机器学习模型的超参数调整(例如,参见 Taking the Human Out of the Loop: A Review of Bayesian Optimization)。Julia 包 BayesianOptimization.jl 目前仅支持基本的贝叶斯优化方法。有多个方向可以改进该包,包括(但不限于)

推荐技能:熟悉贝叶斯推理、非线性优化、编写 Julia 代码和阅读 Python 代码。

预期成果:经过良好测试和记录的新功能。

导师: Johanni Brea

编译器项目 – 代码夏令营

目前正在进行许多编译器项目。请与 Jameson Nash 联系以获取更多详细信息,并让我们知道您对该贡献领域的哪些方面特别感兴趣。这样,我们可以根据您的兴趣和技能调整您的项目。

预期成果:能够在 gdb 中查看更多变量、参数和对象详细信息 推荐技能:大多数这些项目都涉及算法工作,需要愿意并且有兴趣了解如何与大型系统集成。
难度:中等
导师Jameson NashGabriel Baraldi

提高测试覆盖率 (175 小时)

代码覆盖率报告涵盖了所有 Julia Stdlib 包的非常好的覆盖率,但并不完整。此外,覆盖率工具本身(–track-coverage 和 https://github.com/JuliaCI/Coverage.jl)可以进一步增强,例如,提供更好的语句覆盖率准确性或更高的精度。成功的项目可能结合构建代码和查找其他人代码中的错误这两方面。

另一个相关的子项目可能是探索向覆盖率报告中添加类型信息?

推荐技能:关注细节,喜欢提交代码问题,以及破坏事物的能力。
联系方式: Jameson Nash

多线程改进项目(每个 175 小时)

正在持续不断地进行工作以改进正确性和线程化代码。简而言之,以下是一些关于如何加入此工作的想法:

加入定期安排的多线程电话会议,讨论 Julia 语言公共活动日历上的 #多线程 BoF 日历邀请 中的任何内容。

推荐技能:因项目而异,但通常需要一些多线程和 C 经验
联系方式: Jameson Nash

测试/性能基准测试自动化 (350 小时)

Nanosoldier.jl 项目(以及相关的 https://github.com/JuliaCI/BaseBenchmarks.jl)测试了一些更改的性能影响。但是,仍然有许多未涵盖的领域(例如编译时间),而其他领域则覆盖过度(大大增加了测试时间而没有好处),并且某些测试可能没有针对统计功效进行适当配置。此外,当前的报告非常原始,只能进行基本的成对比较,而图表和其他交互式工具将更有价值。因此,对于夏季贡献者来说,这里将会有很多很棒的项目可以应对!

预期成果:改进 Julia 的自动化测试/基准测试框架。技能:对 CI 系统感兴趣和/或有经验。难度:中等

联系方式: Jameson NashTim Besard

张量网络收缩顺序优化和可视化

OMEinsum.jl 是一个用于张量网络计算的纯 Julia 包,已用于各种项目,包括

与其他张量收缩包(如 ITensors.jlTensorOperations.jl)不同,它专为具有任意拓扑的大规模张量网络而设计。OMEinsum.jl 的关键特性是它可以自动优化张量网络的收缩顺序。相关功能在 OMEinsumContractionOrders.jl 中实现。

我们正在寻找一名学生来完成以下任务

推荐技能:熟悉张量网络、图论和高性能计算。

预期结果

导师: 刘金国Jutho HaegemanLukas Devos

项目难度:中等至困难

项目时长:350 小时

联系方式:欢迎通过 电子邮件 或 Julia Slack(用户名:刘金国)提问。

文档工具

Documenter.jl

Julia 手册以及大量生态系统组件的文档都是使用 Documenter.jl 生成的——本质上是一个与 Julia 及其文档系统集成的静态网站生成器。对于任何有兴趣参与 Julia 接口、文档和各种前端技术(Web、LaTeX)方面工作的人来说,这里有大量改进的机会。

Ferrite.jl - 有限元工具箱 - 代码暑期项目

Ferrite.jl 是一个 Julia 包,提供了开发偏微分方程有限元模拟的基本构建块。该包提供了大量的示例供参考,并且设计为简单性和通用性之间的折衷方案,试图以低级的方式将有限元概念与代码 1:1 映射。Ferrite 被多个国家(例如鲁尔大学波鸿和查尔默斯理工大学)的几所大学积极用于教授有限元。其他基础设施以不同网格解析器和一个名为 FerriteViz.jl 的基于 Julia 的可视化工具的形式提供。

下面我们提供了 Ferrite.jl 中四个潜在的项目想法。但是,感兴趣的学生可以自由探索他们感兴趣的想法。请联系下面列出的任何一位导师,或加入 Julia Slack 上的 #ferrite-fem 频道进行讨论。使用 FerriteViz.jl 也可能进行有限元可视化方面的项目。

流固耦合示例

难度:简单-中等(取决于你的具体背景)

项目规模:150-300 小时

问题Ferrite.jl 设计时考虑了在子域上定义偏微分方程的可能性。这使得它非常适合界面耦合的多物理场问题,例如流固耦合问题。但是,我们目前在文档中没有展示此功能的示例。我们也没有提供界面耦合问题所需的所有实用程序。

最低目标:该项目的最低目标是在一个简单的设置中创建一个功能齐全且有文档记录的线性流固耦合示例,将线性弹性与斯托克斯流耦合起来。代码应具有适当的测试覆盖率。

扩展目标:有了这个最小功能示例,可以将项目扩展到不同的方向,例如优化求解器或非线性流固耦合。

推荐技能:

导师Dennis OgiermannFredrik Ekre

高性能组装策略的研究

难度:中等

项目规模:250-350 小时

问题Ferrite.jl 在单线程有限元模拟方面具有出色的性能,这得益于精心设计的冗余工作负载消除。但是,我们最近发现单线程组装的工作方式使得并行组装受内存限制,导致“廉价”组装循环的实现无法在各种系统上扩展。此问题还将转化为高阶方案,其中现有的单线程策略会阻止某些常见的优化策略(例如求和分解)。

最低目标:作为迈向更好并行组装性能的第一步,需要研究不同的组装策略。局部和全局无矩阵方案是此处可以探索的可能性。代码必须经过适当的基准测试和测试,以识别不同的性能问题。

扩展目标:有了这个最小功能示例,可以将项目扩展到不同的方向,例如优化的无矩阵求解器或 GPU 组装。

推荐技能:

导师Maximilian KöhlerDennis 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 小时。

预期难度:困难。

预期成果:许多图卷积操作的性能显著提升。

支持 AMGDPU 和 Apple Silicon

我们目前仅支持在 CPU 和 CUDA 硬件上进行 scatter/gather 操作。我们的目标是利用 KernelAbstractions.jl、AMDGPU.jl 和 Metal.jl 将其扩展到 AMDGPU 和 Apple Silicon。

持续时间:175 小时。

预期难度:中等。

预期成果:AMD GPU 和 Apple 硬件上的图卷积加速,性能大致与 CUDA 相当。

实现时间图的层

时间图是指其拓扑结构随时间变化的图。我们目前使用 TemporalSnapshotsGNNGraph 类型支持这一点,但当前的图卷积和池化层中没有一个支持时间图作为输入。目前,有一些卷积层以具有时间特征的静态图的特殊情况作为输入。在这个项目中,我们将实现以时间图作为输入的新层,并将创建演示如何使用它们的教程。

持续时间:350 小时。预期难度:中等。预期成果:实现用于时间图的新卷积层和示例教程。

熟悉图神经网络和 Flux.jl。

导师

Carlo LucibelloGraphNeuralNetworks.jl 的作者)。请随时在 Julia Slack 工作区 或通过在 GitHub 仓库中打开问题与我们联系。

GUI 项目 - 代码暑期项目

QML 和 Makie 集成

QML.jl 包为 Windows、OS X 和 Linux 上的 Qt QML 提供了 Julia 绑定。在当前状态下,基本 GUI 功能已经存在,并且与 Makie.jl 进行了粗略的集成,允许在 Makie 可视化之上叠加 QML GUI 元素。

预期结果

  1. 将 Makie 的 QML 代码拆分为一个单独的包。 这将允许在 QML 和 Makie 之间指定正确的包兼容性,而无需将 Makie 作为 QML 的强制依赖项(目前我们使用 Requires.jl 来实现这一点)

  2. 改进集成。 目前,Makie 和 QML 之间的连接主要需要手动设置。我们需要实现一些常用功能,例如在视口中注册点击并进行正确的坐标转换以及 3D 视口的导航。

推荐技能:熟悉 Julia 和 Qt 框架,一些基本的 C++ 技能,对 3D 图形和 OpenGL 的亲和力。

持续时间:175 小时,预期难度:中等

导师Bart JanssensSimon Danish

Makie 和 JSServe 中的 Web 应用程序

Makie.jl 是 Julia 编程语言的可视化生态系统,专注于交互性和性能。JSServe.jl 是使 Makie 的基于 Web 的后端成为可能的核心基础设施库。

目前,在 Makie 中设计基于 Web 的用户界面 (UI) 所需的所有要素都已存在,但整个过程本身非常底层且耗时。该项目的目的是简化这一过程。

预期结果

额外任务。 如果时间允许,可以探索以下方向之一。

  1. 使 Makie 基于 Web 的绘图更适合通用 Web 应用(将更多计算转移到客户端,提高交互性和响应速度)。

  2. 将 UI 基础设施推广到原生小部件,这些小部件已在 Makie 中实现,但具有不同的接口。

所需技能。 熟悉 HTML、JavaScript 和 CSS,以及反应式编程。使用 Julia 可视化和 UI 生态系统的经验。

持续时间。 350 小时。

难度。 中等。

导师。 Pietro VertechiSimon Danisch

高性能和并行计算项目 - 代码暑期项目

Julia 正在成为一种重要的技术计算工具,并且非常适合满足不断增长的海量数据分析需求。这组建议的项目针对分析算法和分布式数据管理方面的具体改进领域。

Dagger 的调度算法

难度:中等(175 小时)

Dagger.jl 是一个本机 Julia 框架和调度程序,用于 Julia 代码的分布式执行和通用数据并行,使用动态的、运行时生成的、足够灵活以描述多类并行算法的任务图。该项目建议为 Dagger 实现不同的调度算法,以优化某些类别的分布式算法(如 mapreduce 和归并排序)的调度,并正确利用异构计算资源。参与者将需要查找已发布的分布式调度算法,并在 Dagger 框架之上实现它们,对各种微基准和实际问题进行调度性能基准测试。

导师:Julian SamarooKrystian 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 SamarooDhairya Gandhi

Dagger 上的分布式数组

难度:中等(175 小时)

数组编程可能是Julia中最强大的抽象,但我们对分布式数组的支持还有待改进。本项目的目标是在Dagger.jl框架之上实现一种新的分布式数组类型,这将允许这种新的数组类型易于分布、多线程并支持GPU执行。参与者将需要在其分布式数组实现之上实现各种操作,例如mapreduce、排序、切片和线性代数。最终结果将包括在一系列配置上的广泛扩展基准测试,以及对支持操作的广泛测试套件。

导师:Julian SamarooEvelyne Ringoot

JuliaImages项目 – 代码之夏

  1. 查看所有 GSoC/JSoC 项目
  2. 项目
    1. 项目列表
  3. 分类变量编码
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  4. 预测生存分析中的机器学习
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  5. 更深入的贝叶斯集成
    1. 描述
    2. 您的贡献
    3. 参考文献
    4. 难度:中等至困难
  6. 使用 MLflow 跟踪和共享 MLJ 工作流
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  7. 只有速度狂人才能申请
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  8. 提高测试覆盖率 (175 小时)
  9. 多线程改进项目(每个 175 小时)
  10. 测试/性能基准测试自动化 (350 小时)
  11. Documenter.jl
  12. 流固耦合示例
  13. 高性能组装策略的研究
    1. 在非常大的图上进行训练
    2. 添加图卷积层
    3. 添加模型和示例
    4. 添加图数据集
    5. 实现异构图的层
    6. 使用稀疏线性代数提高性能
    7. 支持 AMGDPU 和 Apple Silicon
    8. 实现时间图的层
  14. 推荐技能
  15. 导师
  16. QML 和 Makie 集成
    1. 预期结果
  17. Makie 和 JSServe 中的 Web 应用程序
    1. 预期结果
  18. Dagger 的调度算法
  19. 分布式训练
  20. Dagger 上的分布式数组
  21. 与其他框架进行基准测试
  22. 讨论和寻找导师的地方
  23. C++
    1. CxxWrap STL
      1. 预期成果
  24. Rust
    1. JuliaConstraints 的总体目标
  25. 基于约束编程的 Kumi Kumi Slope 设计
    1. 核心目标
  26. Agents.jl
  27. DynamicalSystems.jl
  28. 大型语言模型项目
    1. 项目 1:增强 llama2.jl 的 GPU 支持
    2. 项目 2:Llama.jl - 低级 C 接口
    3. 项目 3:增强 AIHelpMe.jl 的知识库
    4. 项目 4:使用 ColBERT v2 增强 Julia 的 AI 生态系统,以实现高效的文档检索
    5. 项目 5:使用高级模式支持和功能增强 PromptingTools.jl
    6. 项目 6:扩展 Julia 大型语言模型排行榜
    7. 项目 7:LLM 的反事实(模型可解释性生成式 AI
  29. 如何联系我们
  30. 观察性健康子生态系统项目
    1. 项目 1:在 Julia 中开发用于观察性健康研究的工具
    2. 项目 2:在 Julia 中开发患者级预测工具
  31. 医学影像子生态系统项目
    1. 项目 3:添加医学影像可视化的功能
    2. 项目 4:添加数据集范围的功能和增强功能的集成
    3. 项目 5:具有多供应商 GPU 支持的高效 MRI 模拟
  32. 从波形文件生成音乐的 MIDI 化
  33. 高效的符号数值集计算
  34. 使用稀疏多项式zonotopes的可达性
  35. 改进混合系统可达性 API
  36. 面板数据分析
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  37. Distributions.jl 扩展
    1. 先决条件
    2. 您的贡献
  38. HypothesisTesting.jl 扩展
    1. 先决条件
    2. 您的贡献
    3. 参考文献
  39. CRRao.jl
    1. 描述
    2. 先决条件
    3. 您的贡献
  40. JuliaStats 改进
    1. 描述
    2. 先决条件
    3. 您的贡献
  41. Survey.jl
    1. 先决条件
    2. 您的贡献
    3. 参考文献
  42. 平滑非线性连续时间系统
    1. 强化学习环境
      1. 预期成果
    2. AlphaZero.jl
      1. 预期成果
  43. 数值线性代数
    1. 矩阵函数
  44. 更好的 Bignums 集成
    1. 特殊函数
    2. 一种 Julia 原生的 CCSA 优化算法
  45. 大规模并行分解弹跳粒子采样器
  46. 机器学习时间序列回归
  47. 用于临近预报和预报的机器学习
  48. 规模化的时间序列预测
  49. 克利福德电路的 GPU 加速模拟器。
  50. 量子纠错码和/或解码器的动物园。
  51. 使用小型门的左右乘法。
  52. 容错 ECC 电路、标志量子位电路等的生成
  53. 基于测量的量子计算 (MBQC) 编译器
  54. 实现图状态模拟器
  55. 轻微非克利福德电路和状态的模拟
  56. 魔态建模 - 蒸馏、注入等
  57. GPU 加速算子和 ODE 求解器
  58. 自动微分
  59. 与 SciML 生态系统更紧密地集成
  60. 高效的张量微分
  61. 符号求根
  62. Symbolics.jl 中的符号积分
  63. 来自符号跟踪的 XLA 风格优化
  64. 自动提高浮点精度(Herbie)
  65. Parquet.jl 增强功能
  66. DataFrames.jl 连接增强功能
  67. 项目 1:共形预测遇见贝叶斯(预测不确定性
  68. 项目 2:反事实回归(模型可解释性
  69. 项目 3:LLM 的反事实(模型可解释性生成式 AI
  70. 项目 4:从反事实到干预(通过最小因果干预进行追溯)
  71. 关于我们
  72. 如何联系我们
  73. TopOpt.jl 的测试和基准测试
  74. 拓扑优化中的机器学习
  75. 在均匀矩形网格上的优化
  76. 拓扑优化的自适应网格细化
  77. 传热设计优化
  78. 基于编译器的自动微分与 Enzyme.jl
  79. 使用 ParaView 进行高级可视化和原位可视化
  80. 在 Turing/Julia 中实现来自 PosteriorDB 的模型
  81. 改进 Turing 和 Turing 的 MCMC 推理包之间的集成
  82. NormalizingFlows.jl 和 Bijectors.jl 的 GPU 支持
  83. NormalizingFlows.jl 和 Bijectors.jl 的批量支持
  84. 具有矢量化、GPU 和高阶导数支持的基准测试采样器的目标
  85. VS Code 扩展
  86. 包安装 UI
  87. 代码生成改进和异步 ABI
  88. Wasm 线程
  89. 高性能,js 对象的低级集成
  90. DOM 集成
  91. 将现有的 Web 集成包移植到 wasm 平台
  92. Web 的本机依赖项
  93. 与不受信任方进行分布式计算
  94. 部署

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中开启讨论,介绍自己并讨论详细的项目想法。为了增加获得有用反馈的机会,请提供详细的计划和想法(不要只是复制这里的内容)。

语言互操作性 – 代码之夏

C++

CxxWrap STL

CxxWrap.jl包提供了一种将编译后的C++代码加载到Julia中的方法。它将一小部分C++标准库暴露给Julia,但仍需要暴露更多函数和容器(例如std::map)。本项目的目的是提高C++标准库的覆盖率。

预期成果

  1. 添加缺少的STL容器类型(简单)

  2. 添加对STL算法的支持(中等)

  3. 调查编译时间改进和包含类型选择的改进(高级)

推荐技能:熟悉Julia和C++

持续时间:175小时,预期难度:困难

导师Bart Janssens

Rust

查看“Pluto”页面上列出的hyper.rs项目,了解如何在Julia包中包装Rust HTTP服务器。

Julia中的约束编程

JuliaConstraints是一个支持Julia中约束编程包的组织。虽然它独立于JuMP.jl,但它旨在随着时间的推移与JuMP.jl紧密集成。有关Julia中基本约束编程的详细概述,请查看我们来自JuliaCon 2021的视频用JuliaCon(straints)为你的生活设定一些约束

JuliaConstraints 的总体目标

通常,解决问题涉及采取两个行动:建模和求解。通常,建模的容易程度和求解的效率之间存在权衡。因此,人们通常需要成为专家才能有效地建模和求解优化问题。我们研究了自动化和构建优化框架的工具的理论基础和实现。一般用户应该专注于实际问题的模型,而不管可用的软件或硬件如何。此外,我们旨在鼓励技术用户使用我们的工具来提高他们的求解效率。

导师:Jean-Francois Baffierazzaare@github

基于约束编程的 Kumi Kumi Slope 设计

这个项目处于为Kumi Kumi Slope游戏开发关卡设计工具的最前沿,利用了Julia编程语言的功能。它优先考虑为用户创建一个交互式图形用户界面(GUI),以便用户积极参与设计优化。虽然(GL)Makie.jl是此GUI的强大候选者,但该项目仍然对其他创新解决方案(例如基于Genie.jl的界面)持开放态度,以适应不同的开发偏好。这项计划的关键是处理任意域、为多目标优化生成解决方案池以及提供游戏设计的视觉输出。这项对约束编程(CP)的探索为设计效率奠定了基础,同时采用了用户定义的美学目标,并标志着在建筑设计中人机协作的开创性一步。

核心目标

  1. 多目标优化和任意域(100-150小时)

    • 多目标优化框架:建立一个强大的框架来同时处理多个目标,范围从效率和紧凑性到可玩性和美观性。

    • 对任意域的支持:设计一种方法来定义和操作CP模型中的任意域,从而实现各种组件类型和设计约束。

  2. 解决方案池和交互式GUI开发(150-200小时)

    • 解决方案池的生成:设计算法来创建各种可行解决方案池,以满足不同的优化标准和用户偏好,培养对设计中人机协作的细致入微的方法。

    • 交互式GUI开发:使用(GL)Makie.jl或替代工具开始开发交互式GUI,以促进Kumi Kumi Slope设计的可视化和操作,使用户能够在一个以用户为中心的的环境中探索、选择和完善设计。

  3. 视觉输出和用户交互(100-150小时)

    • 设计的视觉表示:确保所有潜在解决方案都在GUI中以视觉方式表示,增强用户评估和对比不同设计的能力。

    • 设计改进的反馈机制:在GUI中集成反馈循环,允许用户交互来完善解决方案池,使其更符合用户偏好,并体现项目对人机协作设计的承诺。

本提案旨在在GSoC期限结束时交付一个重要且有影响力的工具。它鼓励候选人深入研究他们特别感兴趣的领域,提供项目重点的灵活性。通过强调现实的目标,例如开发交互式GUI以及处理任意域和多目标优化的基础工作,该项目为未来游戏设计的进步树立了先例,并为需要复杂设计和优化工具的更广泛的应用打开了大门。

动力系统、复杂系统和非线性动力学 – 代码之夏

Agents.jl

难度:中等至困难。

时长:根据项目的不同,为175到350小时。

Agents.jl是一个用于基于代理的建模(ABM)的纯Julia框架。它拥有广泛的功能列表、出色的性能,并且易于学习、使用和扩展。与用Python或Java编写的其他流行框架(NetLOGO、MASON、Mesa)相比,Agents.jl在计算速度、功能列表和可用性方面都优于所有其他框架。

在这个项目中,贡献者将与Agents.jl的主要开发人员配对,以使用更多功能、更好的性能和整体更高的完善度来改进Agents.jl。我们乐意与潜在的候选人讨论项目的描述和概述!

可以实现的功能包括

先决条件:已经为JuliaDynamics中的Julia包或与JuliaDynamics足够相关的包做出贡献。

推荐技能:熟悉基于代理的建模、Agents.jl和Julia的类型系统。不需要复杂系统、社会学或非线性动力学的背景,但如果有会更有优势。

预期结果:记录良好、测试良好的Agents.jl的有用新功能。

导师George Datseris

DynamicalSystems.jl

难度:简单到中等再到困难,具体取决于项目。

时长:根据项目的不同,为175到350小时。

DynamicalSystems.jl是一个屡获殊荣的Julia软件库,用于动力系统、非线性动力学、确定性混沌和非线性时间序列分析。它拥有令人印象深刻的功能列表,但永远不会嫌多。在这个项目中,贡献者将能够用新的算法丰富DynamicalSystems.jl,并丰富他们对非线性动力学和计算机辅助探索复杂系统的知识。

我们在这里没有概述可能的项目,而是邀请感兴趣的候选人联系DynamicalSystems.jl或其子包的开发人员之一,以制定项目大纲。我们热烈欢迎已经想到潜在项目想法的候选人。要获得项目想法,我们建议查看DynamicalSystems.jl子包中未解决问题的列表。

先决条件:已经为JuliaDynamics中的Julia包或与JuliaDynamics足够相关的包做出贡献。

推荐技能:熟悉非线性动力学和/或微分方程和/或数据分析以及Julia语言。

预期结果:记录良好、测试良好的DynamicalSystems.jl的新算法。

导师George Datseris

JuliaGenAI项目

JuliaGenAI Logo

JuliaGenAI是一个专注于推进生成式AI研究并寻找其在Julia编程语言生态系统中的应用的组织。我们的社区由AI研究人员、开发人员和对利用Julia的高性能功能推动生成式AI边界充满热情的爱好者组成。我们努力创建利用Julia在处理复杂AI挑战方面的独特优势的创新工具和解决方案。

与以下组织有高度重叠,你可能也感兴趣

大型语言模型项目

项目 1:增强 llama2.jl 的 GPU 支持

项目概述:Llama2.jl 是 Llama 架构的 Julia 原生移植,最初基于 llama2.c。该项目旨在通过实现 KernelAbstraction.jl 来增强 Llama2.jl 的 GPU 支持,从而显著提高其性能。

导师:Cameron Pfiffer

项目难度:困难

预计时长:350 小时

理想候选人画像

项目目标和交付成果

项目 2:Llama.jl - 低级 C 接口

项目概述:Llama.jlllama.cpp 的 Julia 接口,为当今许多开源工具提供支持。它目前仅利用高级别二进制文件。该项目专注于为 llama.cpp 生成低级 C 接口,从而能够原生访问内部模型状态,这将开启令人难以置信的研究机会和有吸引力的应用(例如,约束生成、新颖的采样算法等)。

导师:Cameron Pfiffer

项目难度:困难

预计时长:175 小时

理想候选人画像

项目目标和交付成果

项目 3:增强 AIHelpMe.jl 的知识库

项目概述

Julia 作为一种高性能语言,在 GenAI 训练数据集中至关重要但代表性不足。AIHelpMe.jl 是我们一项雄心勃勃的计划,旨在通过提供上下文学习(RAG,提示)的方式增强大型语言模型(LLM)对 Julia 的理解,从而弥合这一差距。该项目专注于扩展嵌入式知识库,使其包含最新的、内容丰富的 Julia 信息,并优化问答管道以提供准确、相关的答案。通过将目标 Julia 代码片段和文档注入查询,AIHelpMe.jl 旨在显著提高生成式 AI 对全球 Julia 开发人员的准确性和实用性。

导师:Jan Siml / JuliaLang Slack 上的 @svilup / Julia Zulip 上的 Jan Siml

项目难度:中等

预计时长:175 小时

谁应该申请

项目目标和交付成果

  1. 知识库扩展:扩展 AIHelpMe.jl 知识库,使其包含来自关键 Julia 生态系统的全面、最新资源,例如 Julia 文档站点、DataFrames、Makie、Plots/StatsPlots、Tidier-verse、SciML 等。有关更多详细信息,请参阅 Github Issue。这种扩展对于丰富与 Julia 编程相关的 AI 生成的响应的上下文和准确性至关重要。

  2. 性能调整:在黄金问答数据集上至少提高 10% 的准确性和相关性,改进 AIHelpMe.jl 问答管道的性能。

项目 4:使用 ColBERT v2 增强 Julia 的 AI 生态系统,以实现高效的文档检索

项目概述

深入生成式 AI 和信息检索的前沿,将 ColBERT v2(一种最先进的文档检索和重新排序框架)引入 Julia 编程世界。该计划不仅旨在将 ColBERT v2 转换为在 Julia 中本地运行,还旨在将其与 AIHelpMe.jl(和其他下游库)无缝集成。这种集成有望通过提供本地托管、更具成本效益且高性能的文档搜索功能来彻底改变用户与 AI 的交互方式。通过使这项复杂的技术能够在本地运行,我们减少了对大型商业平台的依赖,确保了数据隐私和控制权,同时保持最小的内存开销。

导师:Jan Siml JuliaLang Slack 上的 @svilup / Julia Zulip 上的 Jan Siml

项目难度:困难

预计时长:350 小时

理想候选人画像

项目目标和预期成果

  1. ColBERT v2 的原生 Julia 转换:成功地使 ColBERT v2 在 Julia 生态系统中运行。重点仅限于 ColBERT v2 的索引和检索功能,例如,您在 示例用法部分 中看到的检索和索引代码片段。有关指导,请参阅现有的索引和检索示例。

  2. 与 AIHelpMe.jl 集成:作为 AIHelpMe.jl(在 PromptingTools.jl 中定义)的嵌入和检索后端之一进行无缝集成。

  3. 包注册和文档:在 Julia 生态系统中注册功能齐全的包,并附带全面的文档和使用示例,以促进社区的采用和贡献。

项目 5:使用高级模式支持和功能增强 PromptingTools.jl

项目概述

PromptingTools.jl 是 Julia GenAI 生态系统中的一个关键工具。该项目是一项协调一致的努力,旨在通过整合更广泛的提示模板和模式来拓宽 PromptingTools.jl 的实用性和适用性,从而满足各种 LLM 后端的需要。该计划直接对应于 PromptingTools.jl 的 GitHub 上的 Issue #67Issue #68Issue #69。通过增强库的功能以支持结构化提取(使用 Ollama 后端)并引入更多标准化的提示模式,我们的目标是使 PromptingTools.jl 成为与开源大型语言模型(LLM)交互的开发人员更强大、不可或缺的资源。

导师:Jan Siml / JuliaLang Slack 上的 @svilup / Julia Zulip 上的 Jan Siml

项目难度:中等

预计时长:175 小时

理想候选人画像

项目目标和交付成果

  1. 模式集成和功能增强:实现和集成各种常见的提示模式(详细信息请参阅 Issue #67)。为 renderaigenerate 函数开发方法,以便轻松使用和渲染这些模板,并附带全面的文档、示例和测试。

  2. 结构化提取支持:为 Ollama 后端添加 aiextract 支持,因为目前不支持此功能。这涉及创建方法和模板来促进结构化数据提取,从而拓宽使用案例并提高通过 PromptingTools.jl 与 AI 模型交互的效率。详细信息请参阅 Issue #68。将功能扩展到其他后端是一个加分项。

  3. 常见后端支持:扩展 PromptingTools.jl 的功能以支持常见后端(例如 HuggingFace Transformers 和 vLLM),确保库与各种 LLM 兼容。我们需要为每个后端创建一个示例来演示功能。详细信息请参阅 Issue #69

项目 6:扩展 Julia 大型语言模型排行榜

项目概述

作为 Julia 社区的重要资源,Julia LLM 排行榜 对用于 Julia 代码生成的开源模型进行基准测试。此增强项目旨在通过合并其他测试用例并将基准测试扩展到代码生成之外的特定于 Julia 的应用(例如,使用黄金问答数据集评估检索增强生成 (RAG) 应用以及许多其他应用)来扩展排行榜。该计划解决了几个 GitHub 问题,旨在提高排行榜的实用性和准确性,使其成为社区中不可或缺的工具。参与者将有机会加深他们对生成式 AI 的了解,同时为一个项目做出贡献,该项目增强了 Julia 社区如何为其需求选择最有效的 AI 模型。

导师:Jan Siml / JuliaLang Slack 上的 @svilup / Julia Zulip 上的 Jan Siml

项目难度:简单/中等

预计时长:175 小时

理想候选人画像

项目目标和交付成果

  1. 测试用例扩展:开发和集成各种测试用例,以更全面地评估 LLM 在 Julia 代码生成方面的能力,增强排行榜的稳健性和可靠性。详细信息请参阅 此处

  2. 基准测试扩展:扩展排行榜的基准测试功能,以包括对 RAG 应用(问答系统)的评估,重点关注其对 Julia 编程语言的了解,以及其他 Julia 任务,例如“帮我加速这段代码”、“编写这段代码的更惯用方式是什么”等等。这与项目 3 略有重叠,但是,这里的重点是确定具有强大整体能力的有希望的本地托管模型。详细信息请参阅 此处

  3. 文档和推广:在一系列博文中记录发现和最佳实践,以分享见解,突出显示表现最佳的模型,并指导社区在 Julia 生态系统中有效地利用生成式 AI。

项目 7:LLM 的反事实(模型可解释性生成式 AI

项目概述:该项目旨在扩展 CounterfactualExplanations.jl 的功能,使其支持大型语言模型(LLM)。作为其基础,还需要实现对 LLM 特征归因的计算支持。该项目将同时为 TaijaJuliaGenAI 做出贡献。

导师:Jan Siml (JuliaGenAI) 和 Patrick Altmeyer (Taija)

项目难度:中等

预计时长:175 小时

理想候选人画像

项目目标和交付成果

如何联系我们

我们很乐意听取您的想法并与您讨论潜在的项目。

可能最简单的方法是加入我们的 JuliaLang Slack 并加入 #generative-ai 频道。您也可以通过 Julia Zulip 联系我们,或在我们的网站 JuliaGenAI 上发布 GitHub Issue。

JuliaHealth 项目

JuliaHealth 是一家致力于通过推广开源技术和数据标准来改善医疗保健的组织。我们的社区由研究人员、数据科学家、软件开发人员和医疗保健专业人员组成,他们热衷于利用技术改善患者预后并促进数据驱动的决策。我们相信,通过共同努力,共享我们的知识和专业技能,我们可以创造出具有变革医疗保健潜力的强大工具和解决方案。

观察性健康子生态系统项目

项目 1:在 Julia 中开发用于观察性健康研究的工具

描述: OMOP 通用数据模型 (OMOP CDM) 是一种广泛使用的数据标准,它允许研究人员以一致且高效的方式分析大型、异构的医疗保健数据集。JuliaHealth 有几个软件包可以与遵循 OMOP CDM 的数据库交互(例如 OMOPCDMCohortCreator.jl 或 OMOPCDMDatabaseConnector.jl)。对于这个项目,我们正在寻找对进一步开发 Julia 中与 OMOP CDM 数据库交互的工具感兴趣的学生。

一些潜在的项目成果可能是

对于 JuliaHealth 中开发的任何功能,也期望学生为现有软件包文档做出贡献,以突出显示如何使用新功能。虽然不是必需的,但如果学生希望将来向 JuliaCon 提交闪电演讲、海报等关于他们工作的成果,我们将支持他们的努力!

如果您有兴趣并希望讨论在这个项目过程中还可以追求什么,请联系该项目的导师。

项目 2:在 Julia 中开发患者级预测工具

描述: 患者水平预测 (PLP) 是医疗保健研究中一个重要的领域,它涉及使用患者数据来预测疾病进展、治疗反应和住院再入院等结果。JuliaHealth 有兴趣开发用于 PLP 的工具,这些工具利用历史患者数据,例如遵循 OMOP 通用数据模型 (OMOP CDM) 的患者医疗索赔或电子健康记录,这是一种广泛使用的数据标准,它允许研究人员以一致且高效的方式分析大型、异构的医疗保健数据集。对于这个项目,我们正在寻找对在 Julia 中开发 PLP 工具感兴趣的学生。

这个项目本质上将是非常实验性和探索性的。为了限制对该项目的期望,以下可能是学生在该项目中遵循的方法

对于 JuliaHealth 中开发的任何功能,也期望学生为现有软件包文档做出贡献,以突出显示如何使用新功能。对于此项目,预计作为提案的一部分,将追求起草并在 JuliaCon 上发表演讲。此外,虽然不是必需的,但鼓励并在项目导师的支持下在 JuliaCon 论文集中发表。

此外,根据软件包的成功情况,有可能对实际患者数据运行实验,以根据选定的研究问题生成实际患者人群的见解。这可能会变成单独的研究论文、会议提交或海报提交。无论在这种情况下发生什么,项目导师都会提供支持。

医学影像子生态系统项目

MedPipe3D.jl 以及 MedEye3D.jl MedEval3D.jl 和目前正在开发的 MedImage.jl 是一组库,旨在为 Julia 语言生态系统提供 3D 医学成像的基本工具。

MedImage 是一个用于标准化加载医学成像数据及其基本处理的软件包,并考虑其空间元数据。MedEye3D 是一个支持医学成像数据显示的软件包。MedEval3D 已经实现了一些高性能算法,用于计算评估 3d 分割模型性能所需的指标。MedPipe3D 是作为一个软件包创建的,它改善了小型生态系统(MedEye3D、MedEval3D 和 MedImage)其他部分之间的集成。

项目 3:添加医学影像可视化的功能

描述: MedEye3D 是一个支持医学成像数据显示的软件包。它包含多个特定于此用例的功能,例如自动窗口化以显示软组织、肺部和其他组织。显示考虑了体素间距、多模态成像叠加显示的支持等等。所有这些都由 OpenGL 和 Rocket.jl 提供的高性能支持。尽管如此,仍然可以进行许多进一步的改进,并在“潜在成果”部分进行了描述。

尽管 MedEye3D 已经支持显示医学图像,但仍然有一些功能对于实现一些更高级的算法(如超体素分割或图像配准)非常有用(并且这两者对于解决医学成像中许多重要问题至关重要)。为了实现这一点,该项目的目标是实现。

  1. 开发对多图像查看的支持,并使用图像配准指示器,例如显示边界和显示连接点的线。

  2. MRI 和 PET 的自动正确窗口化。

  3. 支持超体素 (sv) 的显示。显示 sv 的边界;指示图像的梯度是否与 sv 边界一致。

  4. 提高启动时间。

  5. 通过提供高级函数简化基本用法。

  1. 用户可以加载 2 个不同的图像,它们将并排显示。在滚动过程中,应根据提供的元数据显示身体的同一区域(对于已正确配准的样本图像)。当在其中一个图像上移动鼠标光标时,应显示另一个图像上同一物理位置的光标位置(根据空间元数据计算出的物理位置)。120 小时

  2. 给定最常见的 PET 和 MRI 模态(随机 FDG PET/CT 和 MRI 上的 T2、T1、FLAIR、ADC、DWI) - 用户将看到类似于 3DSlicer 中自动显示的图像 - 10 小时

  3. 给定一个整数掩码,其中唯一整数表示将编码有关单个超体素的信息,以及基础的 3d 医学图像,用户可以选择将原始图像与超像素的边界叠加,其中相邻边界将具有不同的颜色,或在卷积边缘滤波器(例如 Sobel 滤波器)的图像背景上显示这些边界 - 180 小时

  4. 查看器启动时间的任何可衡量的减少 - 20 小时

  5. 用户只需将 MedImage.jl 库中的 MedImage 对象提供给单个显示函数即可显示图像 - 20 小时

项目 4:添加数据集范围的功能和增强功能的集成

描述: MedPipe3D 是作为一个软件包创建的,它改善了小型生态系统(MedEye3D、MedEval3D 和 MedImage)其他部分之间的集成。目前,它需要扩展和调整,以便它可以成为功能齐全的医学成像管道的基础。它需要特定于医学成像的预处理实用程序 - 例如间距、方向、裁剪或填充的统一化。它需要 k 折交叉验证和简单的集成。分割管道中的其他必要部分是增强,这些增强应该更容易使用,并为不确定性量化提供测试时间增强。管道中的最后一件事对于从业者也很重要,即后处理 - 最流行的后处理是查找并仅保留最大的连通分量。

  1. 集成增强,如旋转召回伽马等。

  2. 启用可逆增强并支持测试时间增强。

  3. 添加基于补丁的数据加载,并进行概率过采样。

  4. 计算中值和平均间距,并启用将重新采样应用于数据集的中值或平均间距。

  5. 添加基本的后处理,例如最大的连通分量分析。

  6. 在结构或字典中设置所有超参数(增强;补丁大小,从概率获取二值掩码的阈值),以启用超参数调整。

  7. 启用在验证时期自动显示算法输出,包括将此类输出保存到持久存储中。

  8. 支持 k 折交叉验证。

尽管这组更改在实现上非常耗时,但对于任何具有 Julia 编程语言经验的人来说都不应该构成重大问题。但是,实现这些更改将是使 Julia 语言成为在开发端到端医学成像分割算法方面替代 Python 的良好选择的一大步。

  1. 给定用户提供的配置结构,加载图像后将以一些定义的概率执行提供的增强:亮度变换、对比度增强变换、伽马变换、高斯噪声变换、莱斯噪声变换、镜像变换、缩放变换、高斯模糊变换、模拟低分辨率变换、弹性变形变换 -100 小时。

  2. 启用对模型输入执行某些变换,然后对模型输出执行此变换的逆变换;当用户提供 n 时,执行 n 次模型推理,并将模型产生的分割掩码的均值和标准差作为输出 -60 小时。

  3. 给定用户指定的 3D 补丁大小,算法在数据加载后将裁剪或填充提供的图像以满足设定的尺寸标准。在裁剪过程中,应比没有标签的区域更频繁地选择存在标签的图像部分,存在一些标签指示的分割掩码区域被选择的概率将等于 p (0-1),其中 p 由用户提供 -40 小时。

  4. 给定医学图像路径列表,它将加载它们计算平均或中值间距(用户选择的选项),并返回它。然后在管道执行期间,所有图像都应重新采样到用户提供的间距和用户提供的方向 - 40 小时。

  5. 给定模型输出和一个用于输出每个通道的阈值,用于将输出二值化,用户可以选择仅从二值化算法输出中检索 n 个最大的分量 - 20 小时。

  6. 所有增强方法的概率和超参数、输出通道二值化的阈值、预处理选择的间距、测试时增强方法的数量和设置都应在 hyperparam 结构体中提供,该结构体是管道函数的附加参数,可用于超参数调整 -30 小时。

  7. 在验证 epoch 期间,可以将图像保存到持久存储中,并在训练期间将单个随机图像与输出掩码一起加载到 MedEye3d 中进行可视化 -30 小时。

  8. 用户可以设置 val_percentage(这将导致数据集划分为训练和验证折叠)或提供 k(这将导致 k 折交叉验证)。在后一种情况下,集成体的均值、阈值和标准差将作为模型的最终输出返回 -30 小时。

对于每个点,导师还将向负责实施的人员提供所需功能的 Python 示例,或指向已实现这些功能的 Julia 库(只需集成即可)。

项目 5:具有多供应商 GPU 支持的高效 MRI 模拟

描述: KomaMRI.jl 是一个用于高效磁共振成像 (MRI) 模拟的 Julia 包,用于教育和研究目的。模拟有助于理解难以理解的 MRI 概念,例如脉冲序列、信号生成和采集。此外,它们可以指导新型脉冲序列的设计,并生成用于训练机器学习模型的合成数据。

目前,我们的模拟器使用 CUDA 数组执行 GPU 加速计算。我们现在正在推进实施一种新的模拟方法 (BlochKernel<:SimulationMethod),该方法基于使用 KernelAbstractions.jl 的 GPU 内核编程。此增强功能不仅可以提高计算速度,还可以通过 KernelAbstractions.jl 的多供应商 GPU 支持扩展可访问性。这可以使 MRI 模拟在迭代算法中用于解决反问题。我们正在寻找对开发此功能感兴趣的热心人士。

我们期望在本项目结束时获得以下成果

  1. 扩展和/或改进 GPU 加速模拟,生成了一种新的具有多供应商 GPU 支持的模拟方法 BlochKernel

  2. 开发说明文档,解释新的模拟方法,包括展示一些用例示例。

  3. 在 Buildkite 上实现自动管道,以在多个 GPU 架构上测试模拟。

  4. 报告 BlochKernelBloch 之间的性能改进。

如果您有兴趣并希望讨论在项目过程中可以追求的其他方面,请联系本项目的导师。

音乐数据分析 - 代码夏令营

JuliaMusic 是一个提供软件包和功能的组织,允许分析音乐表演的属性。

从波形文件生成音乐的 MIDI 化

难度:中等。

时长:350 小时。

分析音乐中的时间和强度波动(即 MIDI 数据的形式)很容易。此格式已数字化,并且像 MIDI.jl 和 MusicManipulations.jl 这样的包允许无缝数据处理。但可以说,最有趣的音乐类型是现场音乐。现场音乐表演以波形格式录制。存在一些可以检测音乐击打的“起始”的算法,但它们通常只关注时间信息,因此放弃了检测例如演奏音符的强度。此外,在线上几乎没有针对此问题的代码实现,几乎所有这些代码都是旧的且未维护的。我们希望在 MusicProcessing.jl 中实现一个算法,该算法给定单个乐器的录音,就可以将其“MIDI 化”,这意味着将其数字化为 MIDI 格式。

推荐技能:音乐背景,熟悉数字信号处理。

预期结果:MusicProcessing.jl 中经过良好测试且记录良好的函数 midify

导师George Datseris

JuliaReach - 代码夏令营

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 ForetsChristian Schilling

使用稀疏多项式zonotopes的可达性

难度:中等。

描述。 稀疏多项式带形体是一种新的非凸集合表示,非常适合非线性动态系统的可达性分析。该项目是 GSoC'2022 - Reachability with sparse polynomial zonotopes 的延续,该项目在 LazySets 中实现了基础知识。

预期结果。 预计将在 ReachabilityAnalysis 中添加用于动态系统可达性算法的高效 Julia 实现,该算法利用多项式带形体。成功的项目应该

](https://dl.acm.org/doi/abs/10.1145/3575870.3587130) 中的结果。

对于有抱负的候选人,可以与 ClosedLoopReachability.jl 中实现的神经网络控制系统建立联系。

预期时长。 175 小时。

推荐技能。 必须熟悉 Julia 和 Git/GitHub。熟悉提到的 Julia 包值得赞赏,但不是必需的。该项目不需要理论贡献,但需要阅读研究文献,因此建议具有一定的学术经验。

文献和相关软件包。 此视频 解释了多项式带形体的概念(幻灯片此处)。相关理论在 这篇研究文章 中进行了描述。在 CORA 中存在一个 Matlab 实现(多项式带形体的实现可以在 此文件夹 中找到)。

导师Marcelo ForetsChristian Schilling

改进混合系统可达性 API

难度:中等。

描述。 ReachabilityAnalysis 是一个用于动态系统集合传播的 Julia 库。主要目标之一是处理具有混合离散连续行为的系统(在文献中称为混合系统)。本项目将专注于增强库的功能并全面改进用户生态系统。

预期结果。 具体任务可能包括:混合系统的特定问题启发式方法;时变输入集的 API;流管下近似。代码需要记录、测试并在基准测试中进行评估。如果感兴趣,还可以考虑与 ModelingToolkit.jl 集成。

预期时长。 175 小时。

推荐技能。 必须熟悉 Julia 和 Git/GitHub。欢迎但不要求熟悉 LazySetsReachabilityAnalysis

导师Marcelo ForetsChristian Schilling

JuliaStats 项目 – 代码夏令营

JuliaStats 是一个致力于为 Julia 提供高质量统计软件包的组织。

面板数据分析

在 Julia 中实现面板分析模型和估计器。

难度。中等。持续时间。350 小时

描述

面板数据是一种重要的统计数据,它处理跨时间的多个单位的观测值。面板数据的常见示例包括经济统计数据(在其中观察多个国家/地区随时间的变化情况很常见)。纵向和横截面数据的这种组合对于从数据中提取因果结构非常强大。

导师。 Nils GudatJosé Bayoán Santiago CalderónCarlos Parada

先决条件

您的贡献

参与者将

参考文献

Distributions.jl 扩展

Distributions.jl 是一个提供基本概率分布和相关函数的软件包。

难度。 简单-中等。持续时间。 175-350 小时

先决条件

您的贡献

Distributions.jl 的可能改进包括

HypothesisTesting.jl 扩展

HypothesisTesting.jl 是一个实现一系列假设检验的软件包。

难度。 中等。时长。 350 小时

导师。 Sourish DasMousum Dutta

先决条件

您的贡献

Distributions.jl 的改进包括

参考文献

CRRao.jl

在 Julia 中实现统计建模的一致 API。

难度。 中等。时长。 350 小时

描述

目前,Julia 统计生态系统非常分散。为各种统计模型提供一致的 API 具有价值。 CRRao.jl 包提供了这种设计。

导师。 Sourish DasAyush Patnaik

先决条件

您的贡献

参与者将

JuliaStats 改进

根据参与者的兴趣,对 JuliaStats 包进行一般改进。

难度。 易到难。时长。 175-350 小时。

描述

JuliaStats 提供了 Julia 中许多最流行的包,包括

所有这些包对 Julia 统计社区都至关重要,并且都可以改进。

导师。 Mousum DuttaAyush PatnaikCarlos Parada

先决条件

您的贡献

参与者将

Survey.jl

此包用于研究复杂调查数据。现实世界调查的例子包括经济、健康和农业等领域的官方政府调查;财务和商业调查。社会和行为科学家,如政治学家、社会学家、心理学家、生物学家和宏观经济学家,也在学术和理论环境中分析调查。随着在线管理调查变得更容易,“大型”调查数据集的普及率激增。该项目旨在利用 Julia 的性能增强来创建一个适用于现代“大型”调查的快速包。

难度。 易到难。时长。 175-350 小时

导师。 Ayush Patnaik

先决条件

您的贡献

该项目可以根据参与者的背景和兴趣进行调整,并且根据能力,可以创建几个独立的小项目。参与者可以潜在地从事

参考文献

随机微分方程和连续时间信号处理 – 暑期代码

平滑非线性连续时间系统

贡献者实现了一种最先进的平滑器,用于具有加性高斯噪声的连续时间系统。系统的动力学可以用一个具有局部加性高斯随机波动的常微分方程来描述,换句话说,是一个随机常微分方程。

给定一系列随时间观察到的测量值,包含统计噪声和其他不准确性,任务是产生对导致观察结果的系统未知轨迹的估计。

线性连续时间系统使用固定滞后 Kalman-Bucy 平滑器(与 Kalman–Bucy 滤波器 相关)进行平滑。它依赖于耦合的 ODE,描述了潜伏系统状态的条件分布的均值和协方差如何随时间演变。Julia 中缺少通用的实现。

预期成果:构建连续随机动力系统的非线性平滑的有效实现。

推荐技能:高斯随机变量、贝叶斯公式、随机微分方程

导师Moritz Schauer

评级:困难,350 小时

机器学习项目 – 暑期代码

注意:FluxML 作为 NumFOCUS 子组织参与。前往 FluxML GSoC 页面 了解他们的想法列表。

强化学习环境

时间:175 小时

开发一系列强化学习环境,类似于 OpenAI Gym。虽然我们有可用的 gym 包装器,但它很难安装(由于 Python 依赖项),并且由于它是用 Python 和 C 代码编写的,因此我们无法使用它做更多有趣的事情(例如通过环境进行微分)。

预期成果

一个纯 Julia 版本的选择环境,支持类似的 API 和可视化选项,对于任何使用 Flux 进行 RL 的人都很有价值。

导师:Dhairya Gandhi

AlphaZero.jl

AlphaZero.jl 项目的理念是提供一个 AlphaZero 的实现,该实现足够简单,以便贡献者和研究人员能够广泛访问,同时又足够强大和快速,以便能够在有限的计算资源上进行有意义的实验(我们最新的版本始终比竞争对手的 Python 实现快一到两个数量级)。

以下是一些基于 AlphaZero.jl 的项目想法。请与我们联系以获取更多详细信息,并告知我们您的经验和兴趣,以便我们可以构建最适合您个人资料的项目。

预期成果

在所有这些项目中,目标不仅是展示当前的 Julia 生态系统并测试其极限,而且是通过其他人可以构建的具体贡献来推动它向前发展。这些贡献包括

导师Jonathan Laurent

分子模拟 – 暑期代码

科学的许多方面都可以通过分子的运动和相互作用来解释。分子动力学 (MD) 是一种用于探索这些现象的计算技术,从惰性气体到生物大分子。 Molly.jl 是一个用于 MD 的纯 Julia 包,以及更广泛地用于物理系统模拟的包。该包目前正在开发中,重点关注蛋白质和可微分子模拟。有许多方法可以改进该包

推荐技能:熟悉计算化学、结构生物信息学或模拟物理系统。

预期成果:向包中添加新功能以及测试和相关文档。

导师:Joe Greener

联系方式:请随时通过 电子邮件 或 Julia Slack 上的 #juliamolsim 提出问题 此处

数值项目 – 暑期代码

  1. 查看所有 GSoC/JSoC 项目
  2. 项目
    1. 项目列表
  3. 分类变量编码
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  4. 预测生存分析中的机器学习
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  5. 更深入的贝叶斯集成
    1. 描述
    2. 您的贡献
    3. 参考文献
    4. 难度:中等至困难
  6. 使用 MLflow 跟踪和共享 MLJ 工作流
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  7. 只有速度狂人才能申请
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  8. 提高测试覆盖率 (175 小时)
  9. 多线程改进项目(每个 175 小时)
  10. 测试/性能基准测试自动化 (350 小时)
  11. Documenter.jl
  12. 流固耦合示例
  13. 高性能组装策略的研究
    1. 在非常大的图上进行训练
    2. 添加图卷积层
    3. 添加模型和示例
    4. 添加图数据集
    5. 实现异构图的层
    6. 使用稀疏线性代数提高性能
    7. 支持 AMGDPU 和 Apple Silicon
    8. 实现时间图的层
  14. 推荐技能
  15. 导师
  16. QML 和 Makie 集成
    1. 预期结果
  17. Makie 和 JSServe 中的 Web 应用程序
    1. 预期结果
  18. Dagger 的调度算法
  19. 分布式训练
  20. Dagger 上的分布式数组
  21. 与其他框架进行基准测试
  22. 讨论和寻找导师的地方
  23. C++
    1. CxxWrap STL
      1. 预期成果
  24. Rust
    1. JuliaConstraints 的总体目标
  25. 基于约束编程的 Kumi Kumi Slope 设计
    1. 核心目标
  26. Agents.jl
  27. DynamicalSystems.jl
  28. 大型语言模型项目
    1. 项目 1:增强 llama2.jl 的 GPU 支持
    2. 项目 2:Llama.jl - 低级 C 接口
    3. 项目 3:增强 AIHelpMe.jl 的知识库
    4. 项目 4:使用 ColBERT v2 增强 Julia 的 AI 生态系统,以实现高效的文档检索
    5. 项目 5:使用高级模式支持和功能增强 PromptingTools.jl
    6. 项目 6:扩展 Julia 大型语言模型排行榜
    7. 项目 7:LLM 的反事实(模型可解释性生成式 AI
  29. 如何联系我们
  30. 观察性健康子生态系统项目
    1. 项目 1:在 Julia 中开发用于观察性健康研究的工具
    2. 项目 2:在 Julia 中开发患者级预测工具
  31. 医学影像子生态系统项目
    1. 项目 3:添加医学影像可视化的功能
    2. 项目 4:添加数据集范围的功能和增强功能的集成
    3. 项目 5:具有多供应商 GPU 支持的高效 MRI 模拟
  32. 从波形文件生成音乐的 MIDI 化
  33. 高效的符号数值集计算
  34. 使用稀疏多项式zonotopes的可达性
  35. 改进混合系统可达性 API
  36. 面板数据分析
    1. 描述
    2. 先决条件
    3. 您的贡献
    4. 参考文献
  37. Distributions.jl 扩展
    1. 先决条件
    2. 您的贡献
  38. HypothesisTesting.jl 扩展
    1. 先决条件
    2. 您的贡献
    3. 参考文献
  39. CRRao.jl
    1. 描述
    2. 先决条件
    3. 您的贡献
  40. JuliaStats 改进
    1. 描述
    2. 先决条件
    3. 您的贡献
  41. Survey.jl
    1. 先决条件
    2. 您的贡献
    3. 参考文献
  42. 平滑非线性连续时间系统
    1. 强化学习环境
      1. 预期成果
    2. AlphaZero.jl
      1. 预期成果
  43. 数值线性代数
    1. 矩阵函数
  44. 更好的 Bignums 集成
    1. 特殊函数
    2. 一种 Julia 原生的 CCSA 优化算法
  45. 大规模并行分解弹跳粒子采样器
  46. 机器学习时间序列回归
  47. 用于临近预报和预报的机器学习
  48. 规模化的时间序列预测
  49. 克利福德电路的 GPU 加速模拟器。
  50. 量子纠错码和/或解码器的动物园。
  51. 使用小型门的左右乘法。
  52. 容错 ECC 电路、标志量子位电路等的生成
  53. 基于测量的量子计算 (MBQC) 编译器
  54. 实现图状态模拟器
  55. 轻微非克利福德电路和状态的模拟
  56. 魔态建模 - 蒸馏、注入等
  57. GPU 加速算子和 ODE 求解器
  58. 自动微分
  59. 与 SciML 生态系统更紧密地集成
  60. 高效的张量微分
  61. 符号求根
  62. Symbolics.jl 中的符号积分
  63. 来自符号跟踪的 XLA 风格优化
  64. 自动提高浮点精度(Herbie)
  65. Parquet.jl 增强功能
  66. DataFrames.jl 连接增强功能
  67. 项目 1:共形预测遇见贝叶斯(预测不确定性
  68. 项目 2:反事实回归(模型可解释性
  69. 项目 3:LLM 的反事实(模型可解释性生成式 AI
  70. 项目 4:从反事实到干预(通过最小因果干预进行追溯)
  71. 关于我们
  72. 如何联系我们
  73. TopOpt.jl 的测试和基准测试
  74. 拓扑优化中的机器学习
  75. 在均匀矩形网格上的优化
  76. 拓扑优化的自适应网格细化
  77. 传热设计优化
  78. 基于编译器的自动微分与 Enzyme.jl
  79. 使用 ParaView 进行高级可视化和原位可视化
  80. 在 Turing/Julia 中实现来自 PosteriorDB 的模型
  81. 改进 Turing 和 Turing 的 MCMC 推理包之间的集成
  82. NormalizingFlows.jl 和 Bijectors.jl 的 GPU 支持
  83. NormalizingFlows.jl 和 Bijectors.jl 的批量支持
  84. 具有矢量化、GPU 和高阶导数支持的基准测试采样器的目标
  85. VS Code 扩展
  86. 包安装 UI
  87. 代码生成改进和异步 ABI
  88. Wasm 线程
  89. 高性能,js 对象的低级集成
  90. DOM 集成
  91. 将现有的 Web 集成包移植到 wasm 平台
  92. Web 的本机依赖项
  93. 与不受信任方进行分布式计算
  94. 部署

数值线性代数

矩阵函数

矩阵函数将矩阵映射到其他矩阵,并且通常可以解释为普通函数(如正弦和指数)的推广,这些函数将数字映射到数字。矩阵函数曾经被认为是数值算法的一个利基领域,现在经常出现在密码学、飞机设计、非线性动力学和金融等应用中。

本项目提议实现最先进的算法,扩展 Julia 中当前可用的矩阵函数,如问题 #5840 中所述。除了实矩阵幂、方根和对数等标准函数的矩阵推广外,参与者还将面临设计通用接口的挑战,用于将一般的标量值函数提升到其矩阵模拟,以高效计算任意(良好行为的)矩阵函数及其导数。

推荐技能:扎实的微积分和数值分析基础。

预期成果:用于评估矩阵函数的新方法和更快的方法。

导师陈嘉豪史蒂文·约翰逊

难度:困难

更好的 Bignums 集成

Julia 目前支持大整数和有理数,利用了 GMP。但是,GMP 目前不允许与垃圾回收器良好集成。

因此,本项目涉及探索改进 BigInt 的方法,可能包括

此实验可以作为具有新实现的包进行,也可以作为对 Base 中现有实现的修补程序进行。

预期成果:在 Julia 中实现 BigInt,其性能优于当前版本。

所需技能:熟悉扩展精度数值或性能考虑因素。熟悉 Julia 或 GMP。

导师詹姆森·纳什

难度:困难

特殊函数

作为一种技术计算语言,Julia 提供了大量的特殊函数,既包括在 Base 中,也包括在 StatsFuns.jl 等包中。目前,许多这些函数是在外部库(如 Rmathopenspecfun)中实现的。本项目将涉及在原生 Julia 中实现这些函数(可能利用 SpecialFunctions.jl 中的工作),并在此过程中寻找改进机会,例如支持Float32BigFloat、利用融合乘加运算以及改进错误和边界情况。

推荐技能:扎实的微积分基础。

预期成果:用于评估特殊函数属性的新方法和更快的方法。

导师史蒂文·约翰逊奥斯卡·史密斯。请在 Discourse 或 Slack 上提问

一种 Julia 原生的 CCSA 优化算法

Svanberg (2001) 提出的 CCSA 算法是一种 非线性规划算法,广泛应用于 拓扑优化 和其他大型优化问题:它是一种稳健的算法,可以处理任意非线性不等式约束和大量自由度。此外,该算法的相对简单性使得可以轻松地将雅可比矩阵中的稀疏性(用于处理大量约束)、近似 Hessian 预处理器以及目标或约束中仿射项的特殊情况优化结合起来。但是,目前它只能通过 NLopt.jl 接口在 Julia 中访问外部 C 实现,这极大地限制了其灵活性。

推荐技能:非线性优化算法经验以及对 拉格朗日对偶 的理解,熟悉稀疏矩阵和其他 Julia 数据结构。

预期成果:一个实现原生 Julia CCSA 算法的包。

导师史蒂文·约翰逊

事件链蒙特卡罗方法 – 代码夏令营

大规模并行分解弹跳粒子采样器

在 2021 年 JuliaCon 上,引入了一种新的采样器蒙特卡罗方法(例如,作为贝叶斯推理中后验的采样算法)[1]。该方法利用分解结构来并行地对目标为联合分布的单个连续时间马尔可夫链进行采样。与该方法中的并行吉布斯采样相比,在任何时候都不会保持坐标的子集固定。在吉布斯采样中,保持子集固定是实现大规模并行化的主要手段:给定一组分离的坐标,条件后验分解成独立的子问题。在所提出的方法中,表示从后验中采样的参数向量的粒子永远不会停止移动,只有关于运动方向变化的决策会在坐标的子集上并行发生。

已经有两种可用的实现利用了 Julia 的多线程功能。从那里开始,贡献者使用 GPU 计算技术实现了该算法的一个版本,因为该方法适合于这些方法。

预期成果:使用 GPU 计算实现大规模并行分解弹性粒子采样器 [1,2]。

推荐技能:GPU 计算、马尔可夫过程、贝叶斯推理。

导师Moritz Schauer

评级:困难,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]。

Pluto.jl 项目

遗憾的是,今年我们没有时间指导。 请明年再来!

Pythia – 代码夏令营

机器学习时间序列回归

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 加速模拟器。

克利福德电路的模拟涉及大量使用布尔矩阵的线性代数运算。只要这些加速器支持按位运算,就可以使用许多标准计算加速器(如 GPU)。主要复杂之处在于所考虑的矩阵的元素通常被打包以提高性能并降低内存使用量,例如,64 个元素的向量将存储为单个 64 位整数,而不是作为 64 个布尔值的数组。一个代码夏令营项目可以包括在 GPU 内核中实现上述线性代数运算,然后将其无缝集成到 QuantumClifford 库的其余部分中。至少将包括 泡利-泡利积 和某些 小型克利福德算符,但可以扩展到一般的 稳定器表格乘法,甚至 表格对角化。其中一些功能已经实现,但需要进行大量的改进和进一步改进以及实现缺失的功能。

推荐技能:模拟克利福德电路使用的 稳定器形式 的基本知识。熟悉 Julia 中的性能分析工具和 Julia 的 GPU 堆栈,包括 KernelAbstractionsTullio

导师斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员

预期持续时间:175 小时(但申请者可以通过包括规范化例程中使用的 GPU 加速高斯消元法的工作来将其范围扩大到更长的项目)

难度:如果申请者熟悉 Julia,即使不了解量子信息科学,难度也为中等(但申请者可以通过包含上述其他主题来将其范围扩大到“困难”)

量子纠错码和/或解码器的动物园。

量子纠错码通常以类似于经典码的奇偶校验矩阵的形式表示。这种形式被称为稳定器表格(Stabilizer tableaux)。本项目将涉及创建常用量子纠错码的综合库和/或实现这些码的综合征解码算法。该库已经包含了一些简单的代码和一些解码器的接口——添加另一个小型代码或提供一个小型的文档拉取请求可能是申请此项目时证明能力的好方法。如果包含解码器的工作,该项目可以扩展到更长的时间。该项目很大一部分将涉及文献调研。一些建议包含的代码:颜色码、高维拓扑码、超图积码、代码中的扭曲、较新的LDPC码、蜂窝码、Floquet码。一些建议研究的解码器:迭代解码、小集翻转解码、有序统计解码、置信传播、神经置信传播。

推荐技能:了解用于模拟Clifford电路的稳定器形式。熟悉python的ldpcpymatchingstim等工具会有所帮助。也可以考虑查看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设计工作,可以将其范围延长)

难度:简单

容错 ECC 电路、标志量子位电路等的生成

QuantumClifford库已经有一些生成与纠错相关的不同类型电路的支持(主要是在肖尔算法等综合征测量电路方面),以及评估纠错码和解码器的质量。可以通过实现更现代的编译方案来进行显著改进,特别是依赖于标志量子比特的方案。

推荐技能:了解各种标志量子比特方法。一些有用的参考可以是abc以及这个视频讲座

导师斯特凡·克拉斯塔诺夫 <stefan@krastanov.org> 和 QuantumClifford.jl 团队成员

预计时长:175小时(但如果申请者计划进行更广泛的工作,可以将其范围延长)

难度:困难

基于测量的量子计算 (MBQC) 编译器

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基础设施。

GPU 加速算子和 ODE 求解器

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 生态系统更紧密地集成

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)中有一个强大的格伦纳基实现。找到多项式集的根和簇在许多应用中都非常有用。本项目将涉及实现各种求解多项式系统的方法,并在可能的情况下实现其他非线性方程组。一个好的提议应该尝试枚举一些值得实现的技术,例如

  1. 度数≤4的多项式系统的解析解

  2. 使用HomotopyContinuations.jl测试可解性和查找数值解

  3. 牛顿-拉夫森方法

  4. 使用格伦纳基计算查找簇

这些功能的API应该非常用户友好

  1. 单个roots函数应该接收方程组并以正确的根类型作为输出(簇或数值答案)

  2. 它应该自动找到求解方程组的最快策略并应用它。

  3. 当方程不可解或以某种方式退化时,它应该以描述性错误消息失败。

  4. 这将允许在调用eigs时实现符号特征值计算。

导师Shashi GowdaAlexander Demin 时长:350小时

Symbolics.jl 中的符号积分

实现符号积分的启发式方法。然后连接到规则库,例如RUMI。另请参阅使用符号数值积分技术的潜力(https://github.com/SciML/SymbolicNumericIntegration.jl)

推荐技能:高中/大学一年级微积分

预期成果:Symbolics.jl库中符号积分的工作实现,以及演示其在科学学科中使用的文档和教程。

导师Shashi GowdaYingbo Ma

时长:350 小时

来自符号跟踪的 XLA 风格优化

使用Symbolics.jl变量可以跟踪接收数组并输出数组或标量的Julia函数以生成操作跟踪。此输出可以优化为使用融合操作或调用高度特定的NNLib函数。在本项目中,您将跟踪Flux.jl神经网络函数并对生成的符号表达式应用优化。这可以主要实现为基于规则的重写规则(参见https://github.com/JuliaSymbolics/Symbolics.jl/pull/514)。

推荐技能:了解数组操作的空间和时间复杂度,优化数组代码的经验。

导师Shashi Gowda

时长:175小时

自动提高浮点精度(Herbie)

Herbie记录了一种优化浮点函数的方法,以减少指令计数,同时重新组织操作,以防止浮点误差被放大。将其用Julia编写并在Symbolics.jl表达式上运行将是一个很好的补充。理想的实现将使用Metatheory.jl的e-graph设施来实现这一点。

导师Shashi GowdaAlessandro Cheli

时长:350 小时

表格数据 – 暑期代码项目

Parquet.jl 增强功能

难度:中等

时长:175小时

Apache Parquet 是一种用于表格数据的二进制数据格式。它具有用于压缩和内存映射磁盘上数据集的功能。在 Julia 中实现一个不错的 Parquet 版本可能会具有很高的性能。它将作为以二进制格式分发表格数据的标准格式很有用。存在一个 Parquet.jl 包,其中包含 Parquet 读取器和写入器。它目前在非常基本的层面上符合 Julia 表格文件 IO 接口。它需要更多工作来添加对关键元素的支持,这些元素将使 Parquet.jl 可用于快速的大规模并行数据处理。每个目标都可以作为一个单独的、短期(175 小时)项目来进行。

资源

推荐技能:精通 Julia 语言、Julia 数据栈以及编写高性能 Julia 代码。

预期成果:取决于我们最终商定的具体项目。

导师Tanmay Mohapatra

DataFrames.jl 连接增强功能

难度:困难

时长:175小时

DataFrames.jl 是 Julia 中更流行的表格数据类型实现之一。它支持的功能之一是数据帧连接。但是,需要做更多工作来改进此功能。该项目的具体目标是(项目范围内的最终目标列表可以在稍后确定)。

资源

推荐技能:精通 Julia 语言、Julia 数据栈以及编写高性能多线程 Julia 代码。具备代码基准测试和编写测试的经验。了解连接算法(例如,在 DuckDB 等数据库或其他表格数据处理生态系统(如 Polarsdata.table)中使用的算法)。

预期成果:取决于我们最终商定的具体项目。

导师Bogumił Kamiński

Taija 项目

Taija 是一个组织,它托管面向 Julia 中值得信赖的人工智能的软件。Taija 目前涵盖了一系列使 AI 系统更值得信赖的方法

可以使用各种元包来扩展核心功能

与以下组织有高度重叠,你可能也感兴趣

项目 1:共形预测遇见贝叶斯(预测不确定性

项目概述ConformalPrediction.jl 是一个用于通过 MLJ 中训练的机器学习模型的保形预测进行预测不确定性量化的包。该项目旨在通过添加对 保形(化)贝叶斯 的支持来增强 ConformalPrediction.jl。

导师Patrick Altmeyer 和/或 Mojtaba Farmanbar

项目难度:中等

预计时长:175 小时

理想候选人画像

项目目标和交付成果

项目 2:反事实回归(模型可解释性

项目概述CounterfactualExplanations.jl 是一个用于 Julia 中反事实解释和算法追溯的包。该项目旨在将包的功能扩展到 回归模型

导师Patrick Altmeyer

项目难度:困难

预计时长:350 小时

理想候选人画像

项目目标和交付成果

项目 3:LLM 的反事实(模型可解释性生成式 AI

项目概述:该项目旨在扩展 CounterfactualExplanations.jl 的功能,使其支持大型语言模型(LLM)。作为其基础,还需要实现对 LLM 特征归因的计算支持。该项目将同时为 TaijaJuliaGenAI 做出贡献。

导师Patrick Altmeyer(Taija)和 Jan Siml(JuliaGenAI)

项目难度:中等

预计时长:175 小时

理想候选人画像

项目目标和交付成果

项目 4:从反事实到干预(通过最小因果干预进行追溯)

项目概述:此扩展旨在通过合并一个模块来生成通过最小的因果干预措施实现的可操作追溯来增强 CounterfactualExplanations.jl 包。

导师Patrick Altmeyer(Taija)和 Moritz Schauer(CausalInference.jl)

项目难度:困难

预计时长:350 小时

理想候选人画像

项目目标和交付成果

关于我们

Patrick Altmeyer 是代尔夫特理工大学值得信赖的人工智能博士候选人,致力于计算机科学与金融的交叉领域。他在 JuliaCon 2022 年和 2023 年发表了与 Taija 相关的作品。在过去的一年里,Patrick 指导了代尔夫特理工大学的多个学生小组,他们对 Taija 做出了重大贡献。

如何联系我们

我们很乐意听取您的想法并与您讨论潜在的项目。

可能最简单的方法是加入我们的 JuliaLang Slack 并加入 #taija 频道。您也可以在我们的组织 repo 上发布 GitHub 问题。

Taija Logo

TopOpt 项目 – 暑期代码项目

TopOpt.jl 是一个用纯 Julia 编写的 拓扑优化 包。拓扑优化是形状表示、物理模拟和数学优化交叉口的一个令人兴奋的领域,而 Julia 语言非常适合这个领域。要了解有关 TopOpt.jl 的更多信息,请查看以下 JuliaCon 演讲

以下是您在即将到来的 Julia 贡献季或 Google 暑期代码项目中可以参与的拓扑优化项目的初步列表。如果您有兴趣探索任何这些主题,或者您对拓扑优化有其他兴趣,请通过电子邮件联系主要导师 Mohamed Tarek

TopOpt.jl 的测试和基准测试

项目难度:中等

工作量: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进行现代计算流体动力学模拟

Trixi.jl 是一个用于守恒律自适应高阶数值模拟的Julia包。它旨在易于学生和研究人员使用,可扩展用于研究和教学,以及高效且适用于高性能计算。

基于编译器的自动微分与 Enzyme.jl

难度:中等(取决于所选子任务,最高可达困难)

项目规模:175小时或350小时,取决于所选子任务

Enzyme.jl 是Enzyme的前端,Enzyme是一个现代自动微分(AD)框架,在LLVM代码级别工作。它可以提供快速的前向和反向模式AD,并且与一些其他AD包不同,它支持变异操作。由于Trixi.jl依赖于变异操作和缓存以提高性能,因此此功能对于获得对模拟运行和AD都高效的实现至关重要。

该项目的总体目标是使用Enzyme.jl进行AD,创建一个Trixi.jl(或其子集)的工作原型,并尽可能支持Trixi的许多高级功能,例如自适应网格细化、激波捕捉等。

该项目中可能包含的子任务包括

与该项目相关的子任务,这些子任务与Enzyme.jl没有直接关系,但使用了其他包,包括

该项目非常适合对数值分析和科学机器学习领域感兴趣的软件工程师,以及对在该领域进行研究生研究感兴趣的学生。

推荐技能:至少熟悉一种数值离散化方案(例如,有限体积、间断伽辽金、有限差分);自动微分的初步知识;最好具备(或渴望学习)编写快速代码的能力

预期结果:对Trixi.jl的最先进和生产级自动微分工具的贡献

导师Hendrik RanochaMichael Schlottke-Lakemper

使用 ParaView 进行高级可视化和原位可视化

难度:中等

项目规模:175小时或350小时,取决于所选子任务

可视化和记录结果是科学过程中的一个重要部分。在Trixi.jl中,我们依靠纯Julia包(例如Plots.jlMakie.jl)和开源科学可视化套件ParaView的组合进行可视化。虽然Julia解决方案非常适合可视化一维和二维数据,但ParaView是创建三维数据出版质量图形的首选。

目前,只有在模拟完成后才能使用ParaView进行可视化,并且需要额外的后处理步骤,其中Trixi.jl的原生输出文件使用Trixi2Vtk.jl转换为VTK文件。此额外步骤使其使用起来有些不方便,尤其是在需要在长时间的多小时模拟运行期间检查数值解的当前状态时。

因此,该项目的目的是通过引入两项重大改进使此类可视化更容易

这两项任务都与需要学生熟悉Trixi.jl内部使用的数据格式以及VTK/ParaView的可视化管道相关。但是,它们可以独立执行,因此该项目适合175小时或350小时的投入,具体取决于要解决的任务是其中一项还是两项。

该项目非常适合对可视化和科学数据分析领域感兴趣的软件工程师,以及对在数值分析和高性能计算领域进行研究生研究感兴趣的学生。

推荐技能:至少了解一种数值离散化方案(例如,有限体积、间断伽辽金、有限差分)会有所帮助;可视化或并行处理的初步知识;最好具备(或渴望学习)编写快速代码的能力。

预期结果:Trixi.jl的可扩展、生产质量的科学结果可视化。

导师Michael Schlottke-LakemperBenedict GeiheJohannes Markert

图灵项目 - 代码暑期活动

图灵 是一种嵌入在Julia中的通用概率编程语言。图灵允许用户使用标准Julia语法编写模型,并提供广泛的基于采样的推理方法来解决概率机器学习、贝叶斯统计和数据科学等领域的问题。由于图灵是用纯Julia代码实现的,因此其编译器和推理方法易于修改:可以轻松添加新的模型族和推理方法。

以下是潜在项目的创意列表,但欢迎您向图灵团队提出自己的创意。如果您有兴趣探索任何这些项目,请联系列出的项目导师或孙显达(xs307[at]cam.ac.uk)。您可以在此处找到他们的联系信息。

在 Turing/Julia 中实现来自 PosteriorDB 的模型

导师:Seth Axen,Tor Fjelde,Kai Xu,Hong Ge

项目难度:中等

项目时长:175小时或350小时

描述:posteriordb 是一个包含120个不同贝叶斯模型的数据库,这些模型在Stan中实现(在PyMC中有一个示例模型),并带有参考后验抽样、数据和元数据。为了进行性能比较并展示图灵中的最佳实践,拥有这些模型的图灵实现非常有用。该项目的目的是在图灵/Julia中实现这些模型的大部分子集。

对于每个模型,我们考虑以下任务:正确性测试:当参考后验抽样和采样器配置在posteriordb中可用时,可以通过使用相同的配置对模型进行采样并将样本与参考抽样进行比较来测试实现的正确性和一致性。最佳实践:必须检查所有模型是否与所有图灵支持的AD框架都可微。

改进 Turing 和 Turing 的 MCMC 推理包之间的集成

导师: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

NormalizingFlows.jl 和 Bijectors.jl 的 GPU 支持

导师: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支持。

NormalizingFlows.jl 和 Bijectors.jl 的批量支持

导师:Tor Fjelde,孙显达,David Widmann,Hong Ge

项目难度:中等

项目时长:350 小时

描述:该项目旨在为Bijectors.jl和NormalizingFlows.jl(构建在Bijectors.jl之上)引入批处理模式

简单地说,我们希望用户能够通过将参数“堆叠”到更高维度的数组中来同时向模型提供多个输入。

实现可以采用多种形式,作为一个关心性能和用户体验的开发人员团队,我们对不同的方法和讨论持开放态度。一种可能的方法是开发一种机制,该机制向代码发出信号,指示代码将给定的输入作为批处理而不是作为单个条目进行处理。初步实现可以在此处找到。

具有矢量化、GPU 和高阶导数支持的基准测试采样器的目标

导师:Kai Xu,Hong Ge

项目难度:中等

项目时长:175小时

描述:该项目旨在开发一个综合的目标分布集合,旨在研究和评估各种计算环境中的马尔可夫链蒙特卡罗(MCMC)采样器。该集合将是对现有Julia包VecTargets.jl的扩展和增强,该包目前仅提供有限的向量化、GPU加速和高阶导数支持。该项目的主要目标包括

通过实现这些目标,该项目旨在提供一个强大的框架,可以显著促进更高效和更强大的 MCMC 采样器的研究和开发,从而推动计算统计和机器学习领域的发展。

VS Code 项目

VS Code 扩展

我们通常在寻找想要帮助开发 Julia VS Code 扩展 的人员。我们有许多未解决的问题,其中一些问题相当于重大的项目。

所需技能:TypeScript、Julia、Web 开发。

预期成果:取决于我们商定的具体项目。

导师David Anthoff

包安装 UI

Julia 的 VSCode 扩展可以提供一种简单的方法来浏览可用的包并查看用户系统上安装了哪些包。首先,此项目可以简单地提供一个 GUI,从 Project.toml/Manifest.toml 读取包数据,并显示一些 UI 元素来添加/删除/管理这些包。

这也可以通过包含有关包的元数据来扩展,例如自述文件、GitHub 星星、活动等(有点类似于 VSCode 原生扩展浏览器)。

预期成果:VSCode 中用于包操作的 UI。

推荐技能:熟悉 TypeScript 和 Julia 开发。

导师Sebastian Pfitzner

还可以查看 Pluto - VS Code 集成

Web 平台项目 – 暑期代码

Julia 对目标 WebAssembly 和在 Web 浏览器中运行提供了早期支持。请注意,这是一个快速发展的领域(请参阅 项目存储库 以获取更详细的概述),因此,如果您对这项工作感兴趣,请务必了解当前状态并与我们联系以确定合适的项目。以下是作为一组可能的起点。

除非另有说明,否则这些项目的导师为 Keno Fischer

代码生成改进和异步 ABI

由于 Julia 依赖于异步任务运行时,而 WebAssembly 目前缺乏对栈管理的原生支持,因此 Julia 需要在 wasm 堆中显式管理任务栈,并执行编译器转换以使用此栈而不是本机 WebAssembly 栈。此转换的开销直接影响 Julia 在 wasm 平台上的性能。此外,由于 Julia 使用的所有代码(包括任意 C/C++ 库)都必须使用此转换进行编译,因此它需要涵盖各种输入,并与具有类似需求的其他用户协调(例如,在 Web 上运行 python 的 Pyodide 项目)。该项目旨在提高此转换的质量、稳健性和灵活性。

推荐技能:LLVM 经验。

Wasm 线程

WebAssembly 正在标准化 线程。同时,Julia 中正在进行引入新的线程运行时的工作(请参阅 #22631 和相关的 PR)。此项目将研究为 WebAssembly 平台上的 Julia 启用线程支持,在 WebAssembly 平台上实现运行时并行原语,并确保高级线程构造正确映射到底层平台。请注意,WebAssembly 和 Julia 线程基础设施仍处于积极开发中,并且在项目持续期间可能会继续发生变化。对这些项目状态的了解是该项目的明确先决条件。

推荐技能:C 和多线程编程经验。

高性能,js 对象的低级集成

WebAssembly 正在添加 对原生对象的引用 到其规范中。此功能应允许 Julia 和 JavaScript 对象之间实现非常高性能的集成。由于无法在常规内存中存储对 JavaScript 对象的引用,因此添加此功能需要对运行时系统和代码生成进行一些更改(可能包括在 LLVM 层面),以便正确跟踪这些引用并将其作为对引用表的直接引用或间接引用发出。

推荐技能:C 经验。

DOM 集成

虽然 Julia 现在可以在 Web 平台上运行,但它还不是一种适合 Web 应用程序一流开发的语言。最大的缺失功能之一是与更复杂的 JavaScript 对象和 API(特别是 DOM)的集成和抽象。可以从 Rust 或其他语言中的类似项目中汲取灵感。

推荐技能:在 Julia 中编写库的经验,JavaScript Web API 经验。

将现有的 Web 集成包移植到 wasm 平台

一些 Julia 库(例如 WebIO.jl、Escher.jl)为 Web 平台提供了输入和输出功能。将这些库移植到 wasm 平台上直接运行将使许多现有的 UI 能够自动在 Web 上工作。

推荐技能:在 Julia 中编写库的经验。

Web 的本机依赖项

Julia 项目使用 BinaryBuilder 提供 Julia 包的原生依赖项的二进制文件。存在扩展此支持到 wasm 平台的实验性支持,但很少有包被移植。此项目将包括尝试通过改进 BinaryBuilder 中的工具链支持或(如果必要)移植上游包来修复 wasm 平台上不适用的假设,从而将 Julia 生态系统的大部分二进制依赖项移植到 Web 平台。

推荐技能:在 Unix 环境中构建原生库的经验。

与不受信任方进行分布式计算

Julia 中的分布式计算抽象为实现跨不同机器上的许多通信 Julia 进程的程序提供了便捷的抽象。但是,现有的抽象通常假设所有通信进程都是同一信任域的一部分(例如,它们允许消息在远程执行任意代码)。由于某些节点可能在 Web 浏览器中运行(或多个浏览器节点通过 WebRPC 成为同一分布式计算集群的一部分),因此此假设不再成立,需要设计新的接口来支持多个信任域,而不会过度限制可用性。

推荐技能:分布式计算和在 Julia 中编写库的经验。

部署

目前 Web 平台上 Julia 的支持用例主要针对提供交互式环境以支持对完整语言的探索。当然,这会导致比将 Julia 用作生产部署的一部分所需的二进制文件大得多。通过禁用动态语言功能(例如 eval),可以生成适合部署的小型二进制文件。在 PackageCompiler.jl 等包中已经取得了一些进展,但仍有大量工作要做。

推荐技能:对 Julia 内部工作原理感兴趣或有经验。