开源软件供应链点亮计划——暑期2021

大家好~

今年夏天,Julia中文社区将首次加入 开源软件供应链点亮计划——暑期2021,我们将会陆续在 这里 添加项目提案,欢迎大家关注并转发。

此外,如果你是Julia社区中某个项目的核心开发者,也欢迎你在该项目下提交你的提案,具体流程请直接联系我。

关于该项目有任何问题都可以在这里回帖讨论。

项目列表

1. Julia 官方文档翻译

目前Julia中文文档位于 GitHub - JuliaCN/JuliaZH.jl: Julia语言中文文档 ,从v1.3发布之后之后,该文档已经有一段时间没有更新了,本项目希望能将最新的英文文档在已有的基础上更新,同时完善自动化部署的流程。

项目产出要求

  • 将Julia中文翻译文档更新至与英文v1.6同步
  • 完善自动化部署流程

项目技术要求

  • 熟悉文档翻译
  • 对Julia编程感兴趣

项目主导师:刘金国jinguoliu@g.harvard.edu
项目联合导师:Jun Tianfind_my_way@foxmail.com

2. 基于可逆计算的稀疏矩阵求导

Sparse matrices are extensively used in scientific computing, however there is no automatic differentiation package in Julia yet to handle sparse matrix operations yet. This project will utilize the reversible embedded domain-specific language NiLang.jl to differentiate sparse matrix operations by re-writing the sparse functions in Julia base in a reversible style. We will port the generated backward rules to ChainRules.jl as an extension, where ChainRules.jl is the most popular Julia package providing backward rules for automatic differentiation packages. In fact, NiLang.jl has been proven to differentiate some sparse matrix operations efficiently: How to write a program differentiably - Nextjournal In this project, you are supposed to systematically rewrite the sparse matrix functions in Julia base, which can be challenging but definitely doable. Meanwhile, you will have a chance to learn a reversible programming language!

项目产出要求

  • 一个开源的Julia软件包
  • 超过80的Test coverage
  • 一个简单的展示用例子

项目技术要求

  • 覆盖基础稀疏矩阵函数的微分规则
  • Julia 语言

项目主导师:刘金国jinguoliu@g.harvard.edu
项目联合导师:陈久宁johnnychen94@hotmail.com

3. 添加高性能图像处理算法

organization.Images.jl 是 Julia 下的一个图像处理工具箱,目前它提供了一些底层的图像处理支持来满足开发者的需求,不过目前还依然存在很多图像处理细分领域的算法没有得到复现。根据工作量及难度的不同,项目申请者需要提供一至三个图像处理算法的复现及对应的优化工作,并将其添加到 JuliaImages 组织下。

项目产出要求

  • 实现新的图像处理算法
  • 与其他框架的算法进行性能比较

项目技术要求

  • 了解图像处理算法
  • 对性能优化有一定了解
  • 了解 Julia 语言

项目主导师:陈久宁johnnychen94@hotmail.com

4. 完善 ImageMagick 的 Julia 接口

ImageMagick is a widely used low-level image io and processing library, it also has its Julia frontend ImageMagick.jl, which is used widely in the entire Julia ecosystem. However, ImageMagick.jl project is not under well-maintained; it lacks of the necessary documentation and has few test coverage. The applicant needs to revisit and upgrade the ImageMagick.jl codebase so as to 1) fix legacy ImageMagick.jl issues 2) improve the reliability and 3) port more ImageMagick features to ImageMagick.jl. A complete reference documentation for ImageMagick.jl is also needed.

项目产出要求

  • more test coverage
  • fix legacy issues
  • add documentation
  • (optional) port more functionalities

项目技术要求

  • familiar with Linux, C, and cross-compiling
  • knows Julia

项目主导师:陈久宁johnnychen94@hotmail.com

5. Wide-range JuliaImages demos and missing functionalities

For new or occasional users, JuliaImages would benefit from a large collection of complete worked examples organized by topic. While the current documentation contains many “mini-demos,” they are scattered; an organized page would help users quickly find what they need. We have set up a landing page, but many more demos are needed. Scikit-image is one potential model.

项目产出要求

  • add more demos
  • (Preferred) new missing functionalities
  • (Optional) improve the demo build tool

项目技术要求

  • familiar with Julia and JuliaImages
  • Good technical written in English

项目主导师:陈久宁johnnychen94@hotmail.com

6. Implement Multi-Agent Reinforcement Learning Algorithms in Julia

强化学习领域的一些最新进展引领了人工智能的许多突破,一部分最新的深度强化学习算法已经在ReinforcementLearning.jl库中实现。不过在多智能体方面,目前只实现了一些CFR相关的算法。我们希望有更多的实现,包括MADDPG,COMA,NFSP, PSRO等。

项目产出要求

  • At least two experiments are expected to be added into ReinforcementLearningZoo.jl.
  • The experiment of each algorithm can be run on GPU.
  • A technical report on how it is implemented and example usage.

项目技术要求

  • Basic understanding of Julia and Flux.jl.
  • Some basic knowledge in Reinforcement Learning.

项目主导师:Jun Tianfind_my_way@foxmail.com

7. General improvement to Julia-C interoperability tools

Clang.jl is a Julia language interface for libclang: the stable, C-exported interface to the LLVM/Clang compiler. It also hosts related tools built on top of libclang functionality, one of which is the binding generator. This generator is for auto-generating C library bindings for Julia language from a set of C/C++ headers. It has been refactored recently for adding cross-platform support. This project aims at providing a better user experience on generating bindings for different platforms, improving the support for handling more C declarations and adding more high-level Julia interfaces to the libclang API.

项目产出要求

  • Add support for C vararg functions
  • Add support for dumping Julia documentation from C comments
  • Add support for auto-detecting dependent macros in the system headers
  • Add support for CompilationDatabase a.k.a extracting compile flags from compile_commands.json
  • Improve the support for C bitfield structs
  • Design and implement a more user-friendly configuration API (especially for cross-platform configuration)
  • Update the generator scripts in the downstream packages
  • Other misc. improvements in functionality

项目技术要求

  • Good understanding of Julia AST
  • Good understanding of Clang AST
  • Good understanding of cross-compiling

项目社区导师:Yupei Qi
导师联系方式:qiyupei@gmail.com

8. 扩展ReinforcementLearning.jl中的离线强化学习相关算法

离线强化学习领域的一些最新进展正在将强化学习变得更加数据驱动,从而可以利用有监督机器学习领域的一些成熟方案。目前为止,ReinforcementLearning.jl中仅仅提供了最基础的Behavior Cloning算法,我们希望看到更多离线强化学习算法被囊括进来,如BCQ和CQL等。除此之外,为了加速离线强化学习的研究,我们希望能构建一个新的包,将更多基本离线强化学习数据集加入其中,如 https://github.com/deepmind/deepmind-research/tree/master/rl_unplugged 此外,额外的一个任务是优化已有的连续动作空间算法。

项目产出要求

  • 创建一个新的包,将各种不同类型的离线强化学习数据集包含其中
  • 优化已有的连续动作空间相关算法,同时添加更多的实验
  • 新增两到三个离线强化学习算法并撰写技术报告

项目技术要求

  • 了解基本的离线强化学习算法
  • 熟悉Julia相关的语法,以及常见的包,如Flux.jl和CUDA.jl

项目主导师:Jun Tianfind_my_way@foxmail.com

9. Parser generator targeting Julia

Julia语言中的parsing任务通常是手工的。然而,以更小的时间和精力来制造parser是可行的。一个广泛使用的选项是parser generator,它利用声明式编程的优势,从简洁的规范中生成(可能后端无关的)的parser,并消除那些对parser开发者来说没有必要的工作。我们考虑为Julia实现一个parser generator,尤其注意拥有用户友好的报错、时间高效的生成程序以及强大的解析能力。

项目产出要求

  • A Julia package that provides parser generator/一个提供parser generator的Julia程序库
  • Corresponding improvements to large Julia projects(e.g., Yao.jl) that requires parsers/对parser的大型julia项目在相关方面做出改善

项目技术要求

  • Basic knowledge about parsers
  • Julia language skill
  • Understanding about Backus-normal Form
  • It could be better to have knowledge about packrat parsing, parser combinators, LL/LR parsers
  • It could be better to understand pattern matching and algebraic data types

项目社区导师:赵王宏楦
导师联系方式:twshere@outlook.com
项目联合导师:罗秀哲me@rogerluo.dev

10. Redesign and Polish Yao Website

Improve whole website banner 1. Documenter currently do not support custom banner, implement this feature request based on previous hacks. (is it possible to have custom banner on top? · Issue #1132 · JuliaDocs/Documenter.jl · GitHub). Improve Tutorial CI pipeline 1. polish Pluto notebook layout on our tutorial website, replace the implementation with native . Improve Documentation pipeline 1. move all documentation & website to one repo 2. implement CI to auto build documentation from component packages on tagged version and master/main branch Improve Website Style 1. improve CSS to have more consistent style. 2. improve large screen experience (https://github.com/JuliaDocs/Documenter.jl/issues/1563)

项目产出要求

  • A more user-friendly website for Yao
  • Improved pipelines for CI and Documentation

项目技术要求

  • Julia
  • HTML/CSS/Javascript

项目社区导师:赵宸
导师联系方式:zhaochen17@mails.ucas.ac.cn
项目联合导师:罗秀哲me@rogerluo.dev

11. Basic Quantum Circuit Emulation Subroutine

Implement the code generator with multithreading and CUDA kernel for the tiny kernel DSL. And we will further explore these high performance computing tasks as well as compiler engineering in Julia language from this project.

项目产出要求

  • an open-source Julia package
  • tests with code coverage > 80%
  • practical examples

项目技术要求

  • basic knowledge on computer architecture, such as the concept of CPU cache, RAM, SIMD and CUDA

项目社区导师:赵宸
导师联系方式:zhaochen17@mails.ucas.ac.cn
项目联合导师:罗秀哲me@rogerluo.dev

12. 整合 Yao 与 Julia 的其他量子计算软件包

  1. 将 PastaQ (GitHub - GTorlai/PastaQ.jl: Package for Simulation, Tomography and Analysis of Quantum Computers) 与 Yao 整合.

  2. 将 QXTools (GitHub - JuliaQX/QXTools.jl: Julia package for quantum circuit simulation using tensor networks) 与 Yao 整合, 为 Yao 提供基于张量网络的量子线路模拟器.

  3. 将 QuantumClifford (GitHub - QuantumSavory/QuantumClifford.jl: Clifford circuits, graph states, and other quantum Stabilizer formalism tools.) 与 Yao 整合, 以实现在 Yao 中高效模拟 Clifford 线路.

项目产出要求

  • an open-source Julia package
  • some practical examples

项目技术要求

  • Julia 基础
  • 了解 Yao.jl
  • basic knowledge on quantum computing

项目社区导师:赵宸
导师联系方式:zhaochen17@mails.ucas.ac.cn
项目联合导师:罗秀哲me@rogerluo.dev

13. Native Julia ODE, SDE, DAE, DDE, and (S)PDE Solvers

The DifferentialEquations.jl ecosystem has an extensive set of state-of-the-art methods for solving differential equations hosted by the SciML Scientific Machine Learning Software Organization. By mixing native methods and wrapped methods under the same dispatch system, DifferentialEquations.jl serves both as a system to deploy and research the most modern efficient methodologies. While most of the basic methods have been developed and optimized, many newer methods need high performance implementations and real-world tests of their efficiency claims. In this project students will be paired with current researchers in the discipline to get a handle on some of the latest techniques and build efficient implementations into the *DiffEq libraries (OrdinaryDiffEq.jl, StochasticDiffEq.jl, DelayDiffEq.jl). Possible families of methods to implement are:
Global error estimating ODE solvers
Implicit-Explicit (IMEX) Methods
Geometric (exponential) integrators
Low memory Runge-Kutta methods
Multistep methods specialized for second order ODEs (satellite simulation)
Parallel (multithreaded) extrapolation (both explicit and implicit)
Parallel Implicit Integrating Factor Methods (PDEs and SPDEs)
Parallel-in-time ODE Methods
Rosenbrock-W methods
Approximate matrix factorization
Runge-Kutta-Chebyshev Methods (high stability RK methods)
Fully Implicit Runge-Kutta (FIRK) methods
Boundary value problem (BVP) solvers like MIRK and collocation methods
BDF methods for differential-algebraic equations (DAEs)
Methods for stiff stochastic differential equations
Many of these methods are the basis of high-efficiency partial differential equation (PDE) solvers and are thus important to many communities like computational fluid dynamics, mathematical biology, and quantum mechanics.
This project is good for both software engineers interested in the field of numerical analysis and those students who are interested in pursuing graduate research in the field.
Recommended Skills: Background knowledge in numerical analysis, numerical linear algebra, and the ability (or eagerness to learn) to write fast code.

Expected Results: Contributions of production-quality solver methods.

Mentor: Yingbo Ma mayingbo5@gmail.com

14. Establish a General Pipeline for Offline Reinforcement Learning Evaluation

To facilitate the evaluation of offline RL algorithms in Julia, we’d like to setup a general pipeline by leveraging existing datasets and pre-trained policies. This project includes two tasks. Firstly, an independent package is required to load existing offline RL datasets in GitHub - google-research/deep_ope . Secondly, the pretrained polices can be loaded in the Julia side for model selection benchmarking.

项目产出要求

Create a new Julia package ReinforcementLearningDatasets.jl to export existing datasets with the interfaces defined in ReinforcementLearningCore.jl
Add experiments to load pretrained policies and evaluate them in Julia.

项目技术要求

Be familiar with both Python (Tensorflow) and Julia(Flux.jl)
Understand basic concepts in offline reinforcement learning.

Mentor: Jun Tian find_my_way@foxmail.com

2 个赞

明年会有类似的活动吗?很希望在明年参加!

为啥不在今年参加呢? :yum:

您就是项目一的发布者吧?理论物理研一课业繁重,时间不充裕 :yum:

理解理解,明年该项目如果还有的话我们也会参与的

请问,对于“基于可逆计算的稀疏矩阵求导”项目,技术要求中第一条“超过80的Test coverage”是指在申请者Github上有一个Test coverage超过80的开源库吗?

是指实现的"基于可逆计算的稀疏矩阵求导"作为一个库要有超过80%的测试覆盖率。

1 个赞

嗯,明白了。原来项目技术要求是指项目产出的技术要求。

非常希望申请《基于可逆计算的稀疏矩阵求导》项目~我是计算数学方向的硕士生,目前研一在读,研究方向是矩阵与张量的数值计算优化~
技能点:了解Julia;熟悉python的数值计算、数据科学与深度学习pytorch等框架;熟悉cpp与Linux平台、Git协作;扎实的数值计算基础(&出于兴趣乱点的计组、OS基础 :joy:
对项目的初步理解:使用可逆编程语言NiLang重写julia base中的稀疏矩阵算子
个人情况简介&寻求建议:在本科期间就一直默默关注julia发展,在这学期进入数值计算课题后也积极在课题组推广Julia的使用;尽管了解微分法则与计算图,但之前没有接触过NiLang(很有兴趣去学习它!)。
Q1: 需要在申请前完成类似giggle老师展示的demo吗?
Q2: 现在开始跟着官方文档学习NiLang还有希望吗 ?:joy:
或许对项目理解仍存在偏差,希望可以得到老师们的指正与建议~如有可能,希望可以与老师进一步联系~
我的邮箱: li_j20@fudan.edu.cn个人博客: https://jieli-matrix.github.io/

1 个赞

可以把流程同步出来啊,外行看看

这里具体流程是指:

  1. 你(作为项目的mentor)攥写一份proposal,格式与 开源软件供应链点亮计划-开源之夏2023 这里的一致
  2. 我(目前只有一个管理员账号)在后台提交该申请
  3. 举办方审核该proposal
  4. 审核通过后会在官网上线,否则驳回并提交修改意见

如果有不清楚的地方我再补充。

NiLang 本身的设计并不是特别复杂,背后也许会有一些可逆计算的理论需要去学习,不过如果仅仅使用 NiLang 的话根据文档和 NiLang 现成的代码应该也能大概看个明白。即使现在学的话也完全来得及。

如果有任何问题可以在 NiLang 的仓库发 issue 询问,或者动手能力强的话甚至可以直接提 PR了。我想 @GiggleLiu 应该会很愿意解答你的问题,或者对你提的 PR 给出反馈建议。

对项目的初步理解:使用可逆编程语言NiLang重写julia base中的稀疏矩阵算子

重写稀疏矩阵算子最重要的目的是为了确保中间过程不会将稀疏矩阵稠密化,否则的话会带来极大的内存和计算开销。所以这里需要做的事情就是确保输入是稀疏矩阵的情况下,输出也是稀疏矩阵,中间变量可以是非常小的稠密矩阵作为cache.

2 个赞

谢谢老师的回复~

是非常值得思考的关键点,我在学习可逆计算时会结合稀疏矩阵算子认真思考这一点的实现~
再次表达我的感谢~

请问完全没接触过数值计算,普通业务程序员,稀疏矩阵算子 要看懂有什么书推荐吗

需不需要加个对Julia必备工具的使用文档 ?


都是英文,普及开来有点难度
话说到现在我都不会用GPU编程,调试也懒得调 :yum:

1 个赞

这个我有在写,等我写完后会贴上去

改善c接口的这个项目我感觉非常心动,不知道有没有机会参加 :smiley:
我最近发现julia的语法和c有很好的兼容性,而且julia还自带了JIT,就准备做一个c代码转换到julia的小玩具c2julia,正好就在研究clang的AST。
Julia方面我没写过完整的包,不过经常用pluto,官方文档也非常熟悉,不知道对AST需要了解到什么程度。

可以直接与 @Gnimuc 联系 。 呃,我把联系方式给忘了,稍等。

已更新

欢迎欢迎,Julia AST 内容不多,会组装 Expr 即可,这个项目主要是 libclang 的应用。

具体内容可以参考Issue Tracker: Issues · JuliaInterop/Clang.jl · GitHub